1

スーパークラス

public class BasicDao {
    public Object createQuery() {
        return new Object();
    }
}

実装

public class MyDAO implements BasicDao {
    public Object getMyData() {
        Object obj = createQuery();
        // more code...
        return ...;
    }
}

メソッドをテストする必要があり、getMyData()メソッドをモック/抑制したいcreateQuery()ので、テスト環境で失敗します。

ありがとう!

4

2 に答える 2

1

この方法でテストを行わないでください。これはパーシャル モッキングと呼ばれますが、これは間違っています。つまり、記述されたコードが適切なオブジェクト指向設計を使用していないことを意味します。Inheritance よりも Compositionを優先する必要があります。

それにもかかわらず、DAO はシステムの境界を表すオブジェクトです。

  • 一方はオブジェクト指向
  • 一方はリレーショナルです

この場合、統合テストを作成する必要があります。

  • DB、実際のインスタンス、またはメモリ内インスタンス ( h2hsqldb、...)にデータを挿入します。
  • データを準備します。ここには多くの可能性があります ( DbUnitDbSetup、...)
  • このデータベースで DAO テストを構成して実行する

より多くのセットアップと実行時間が必要になる場合がありますが、長期的にはより優れています。

  • より堅牢なマッピング テスト
  • テストを変更せずに、技術的な実装を簡単に変更できる
  • データベースに対して実行すると、構成の問題/課題をより早く検出し、それらが 3 年後に壊れないようにすることができます

また、@ user3386493 の回答は技術的には正しいですが、この種のスタブをスパイで使用することをお勧めします (そうしないと、実際のメソッド コードが実行されます)。

MyDAO daoSpy = Mockito.spy(new MyDAO());
doReturn(new Object()).when(daoSpy).createQuery();
于 2015-07-18T09:45:43.767 に答える