それを呼び出す関数をテストすることによって関数をテストするためのテスト方法はまだユニットテストですか?


11

関数Bをテストする場合、その関数Bを呼び出す関数Cをテストします。つまり、その関数Bを呼び出す関数Cをテストするためのテストプログラムを作成しても、テストメソッドはユニットテストなどと呼ばれますか?

ターゲット関数を呼び出す関数を間接的にテストすることが望ましい場合、および関数を直接テストすることが望ましい場合はいつですか?

回答:


9

単体テストの一般的な定義はISTQBの定義です。

ユニットテストは、関数、クラス、プロシージャ、インターフェイスなど、アプリケーションのテスト可能な最小の部分です。ユニットテストは、ソースコードの個々のユニットをテストして、それらが使用に適しているかどうかを判断する方法です。

この定義によると:

  • Bのテストプログラムを作成する場合、それは(Bの)単体テストです。
  • Cのテストプログラムを作成する場合、それは(Cの)単体テストです。

これで、意図とテストスコープに違いが生じる可能性があります。Cを使用してBのテストプログラムを作成しても、Cへの入力を提供し、出力に基づいてBが正しいかどうかを確認するだけなので、それはCの単体テストです。Cが機能するのでBが機能すると推測するだけです。

統合テストの定義もあります:

インターフェースおよび統合されたコンポーネントやシステム間の相互作用における欠陥を明らかにするために行われたテスト。

ソフトウェアコンポーネントの通常の定義は、それが独立しており、独自に展開できることを意味します。ここでは、BとCは独立したコンポーネントではないようなので、統合テストはありません。


5

これは、あなたがユニットと見なすものに大きく依存します。C個別にテストしても意味がないほど単純な場合、テストは単体テストです。

さらに重要なことは、特定のユニットのユニットテストスイートが100%に近いラインカバレッジを持ち、実際に予想されるすべてのコードパスをテストすることです。


1

はい、関数が他の関数を呼び出す場合でも、ユニットテストと呼びます。

ユニットテストでは、プライベート実装ではなく、クラスのパブリック動作をテストする必要があります。このGoogleのトイレ用品のテストで示唆されているように

クリーンコードのルールに従う場合、関数は4行のコードより長くてはなりません。これは、ユニットテストで別のプライベート関数をテストしないことを不可能にします。

ほとんどのプライベート関数を個別に単体テストしないのはなぜですか?のでリファクタリングが強制するすべてのあなたの実装ユニット・テストを更新し続けます。多くの場合、これは苛立たしくなりますが、リファクタリング中にパブリックの動作は変更されないため、テストで更新を行う必要はありません。あなたはプライベートを彼らのパブリックな親とテストすることができるはずです。場合によっては、複雑なプライベートをテストする価値があるかもしれませんが、それら自体で個別のクラスにする必要があるかどうか疑問に思いますか?

統合テスト

関数が別のクラスの一部である場合は異なります。次に、コンポーネントテストまたは統合テストと呼びます。あなたは複数のクラスを統合し、それらに対してテストを実行しています。関数Bは関数Cに依存します。関数Bを単体テストできるようにするには、依存性注入を使用して、テストしている関数を分離できます。これで、再び単体テストになります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.