次のようなクラスがあります。
class A
{
public method doSomething()
{
//....
DAO dataAccessor = new DAO();
List<Object> result1 = dataAccessor.getData(dataAccessor.getSql1());
List<Object> result2 = dataAccessor.getData(dataAccessor.getSql2());
//.. do some stuff with the results
}
ここで、クラスをモックして、上記の関数をテストするためにjMockitを使用しますDAO
。
これは私のテストクラスがどのように見えるかです:
class A_Test
{
private A myAClass;
@Mocked DAO mockedDAO;
List<Object> resultToSql1, resultToSql2;
// ... Some initializations...
@Test
public void testDoSomething()
{
new NonStrictExpectations()
{
mockedDAO.getSql1(); result = "SQL1";
mockedDAO.getData(withEqual("SQL1")); result = resultToSql1;
mockedDAO.getSql2(); result = "SQL2";
mockedDAO.getData(withEqual("SQL2")); result = resultToSql2;
};
myAClass.doSomething();
}
}
さて、最初のマスクに関する2番目の期待値getData()
、つまりモックオブジェクトは、期待値の最初の行(処理する行sql1
)を宣言したことがないかのように動作するようです。
の最初の呼び出しgetData()
は、初期化した値の代わりに、空のコレクションを返しますresultToSql1
。2番目の呼び出しはresultToSql2
、期待どおりに戻ります。
次の行にコメントすると:
mockedDAO.getData(withEqual("SQL2")); result = resultToSql2;
最初の呼び出しは私が定義したものを返します- resultToSql1
、2番目の呼び出しは空のコレクションを返します。意味あり。
だから、私は何が間違っているのですか?getData()
呼び出しのパラメーターに基づいて、から2つの異なる戻り値を定義するにはどうすればよいですか?
どんな助けでもいただければ幸いです。
ありがとう!