回答:
単体テストの一般的な定義はISTQBの定義です。
ユニットテストは、関数、クラス、プロシージャ、インターフェイスなど、アプリケーションのテスト可能な最小の部分です。ユニットテストは、ソースコードの個々のユニットをテストして、それらが使用に適しているかどうかを判断する方法です。
この定義によると:
これで、意図とテストスコープに違いが生じる可能性があります。Cを使用してBのテストプログラムを作成しても、Cへの入力を提供し、出力に基づいてBが正しいかどうかを確認するだけなので、それはCの単体テストです。Cが機能するのでBが機能すると推測するだけです。
統合テストの定義もあります:
インターフェースおよび統合されたコンポーネントやシステム間の相互作用における欠陥を明らかにするために行われたテスト。
ソフトウェアコンポーネントの通常の定義は、それが独立しており、独自に展開できることを意味します。ここでは、BとCは独立したコンポーネントではないようなので、統合テストはありません。
はい、関数が他の関数を呼び出す場合でも、ユニットテストと呼びます。
ユニットテストでは、プライベート実装ではなく、クラスのパブリック動作をテストする必要があります。このGoogleのトイレ用品のテストで示唆されているように。
クリーンコードのルールに従う場合、関数は4行のコードより長くてはなりません。これは、ユニットテストで別のプライベート関数をテストしないことを不可能にします。
ほとんどのプライベート関数を個別に単体テストしないのはなぜですか?のでリファクタリングが強制するすべてのあなたの実装ユニット・テストを更新し続けます。多くの場合、これは苛立たしくなりますが、リファクタリング中にパブリックの動作は変更されないため、テストで更新を行う必要はありません。あなたはプライベートを彼らのパブリックな親とテストすることができるはずです。場合によっては、複雑なプライベートをテストする価値があるかもしれませんが、それら自体で個別のクラスにする必要があるかどうか疑問に思いますか?
統合テスト:
関数が別のクラスの一部である場合は異なります。次に、コンポーネントテストまたは統合テストと呼びます。あなたは複数のクラスを統合し、それらに対してテストを実行しています。関数Bは関数Cに依存します。関数Bを単体テストできるようにするには、依存性注入を使用して、テストしている関数を分離できます。これで、再び単体テストになります。