こんにちは、インターフェイス A と A を実装するクラス B があるとします。テスト クラス内で、A を実装するダミー クラスを作成し、「インターフェイス メソッドをテスト」します。私の質問は、クラス B が「取得」するメソッドをテストする必要があるかどうかです。インターフェイスから。
5 に答える
一般に、テストでは、コードのすべての (実行可能な) 行に触れる必要があります。インターフェイスを実装している場合は、インターフェイスの「契約」を形成するテストをコーディングできるため、インターフェイスのすべての実装者にテストが適用されるため、はるかに簡単になります。
これにより、すべての実装者間で一貫性が確保されます。実装者の動作が異なる状況 (NullReferenceException と ArgumentNullException など) に遭遇した場合は、どちらが「正しい」か、どちらが間違っているかを指定するテストを追加できます。これにより、将来の驚きが少なくなります。
予想される動作を説明するために、すべてのインターフェイスに一連のテストを添付する必要があるとまで言うかもしれません。
もちろん、具体的な実装者でのみテストできる実装固有のものがあります (たとえば、「ファイルは書き込まれましたか?」対「レコードはコミットされましたか?」)。これらのものは、オーバーライドまたはラムダを通じてインターフェースのテストスイートに提供する必要があります。
私の経験では、具象クラスとそれらのインターフェースとの相互作用をテストするだけです。
つまり、A を実装する具象クラス B がある場合は、B と、それが参照する他のオブジェクトとの相互作用をテストするだけです。
私はあなたのすべての投稿を読みました II は、このソリューションが最も効果的だと思います。
Interface A
{
String A1();
String A2();
}
public class B:A
{
String A1(){return "A1"}
String A2(){return "A2"}
}
public class testB
{
public void B_Can_Return_A1()
{
A b=new B();
Assert.True(b.A1=="A1")
}
}
しかし、具体的な実装がまだ依存しているインターフェイスからメソッドを削除する場合、インターフェイスのその部分を削除するべきではありませんか?
これは本当ですが、これはテスト、つまりテスト済みで実施する必要があります。インターフェースは開発において大きな役割を果たす (べきである) ため、変更が将来的に大きな問題を引き起こす可能性があります。オブジェクトがインターフェースを実装している場合、これがテスト方法または同様のものであると思います。
これについてコメントしてください。
はい、テストで 100% のコード カバレッジを得ることを目指すべきです
インターフェースには具体的な実装が必要ないため、定義上テストするものがないため、テストする必要はありません。テストは、インターフェースの具体的な実装のためのものでなければなりません。
インターフェイスの部分的な実装が必要な状況に陥った場合は、私と同じようにすることができます。たとえば、アイテムのインターフェースがあるとします。これは私が呼び出しIItem
、すべてのインターフェースを備えています。次に、Item
共通コードのインターフェイスの部分実装であるを宣言し、 の特殊化のために 、などを宣言します。ItemA
ItemB
Item