ですから、私はちょっと複雑な問題を抱えています。大量のコードをコピーする代わりに、同様の例で説明します。問題は、JMockitの使い方がよくわからないということです。
私はインターフェースを持っています:
public interface IRsrcResolver {
RsrcSet getForQuery(Query, RsrcContext, int);
}
それの実際の実装があります-それはちょっと激しいです。そこで、nullを返すだけのモックバージョンを作成しました。次に、適切な値を返す[nonstrict]expectationを設定します。テストをテストに変更します。
コード内:
public class MockRsrcResolver implements IRsrcResolver {
RsrcSet getForQuery(Query, RsrcContext, int) { return null; }
}
Testクラスで実装してから、期待値を設定します(StateEngineはRsrcResolverを使用します)
public class StateEngineTest {
@Mocked
public IRsrcResolver rsrcResolver;
@Mocked
public RsrcSet rsrcSet;
@Mocked
private StateEngine stateEngine;
public void setUp () throws Exception {
stateEngine = new StateEngine ();
rsrcResolver = new MockRsrcResolver ();
rsrcSet = new RsrcSet ();
new NonStrictExpectations () {
{
rsrcResolver.getForQuery((Query) any, (RsrcContext)any, anyInt);
result = rsrcSet;
}
}
}
@Test
public void testSetState () {
/*... does something that calls getForQuery (...) on an IRsrcResolver ...*/
stateTest.doSomething ();
/* ... assert assert assert ... */
}
}
doSomethingには、次のようなものがあります。
IRsrcResolver m_rsrcResolver = new RsrcResolver ()
RsrcSet m_rsrcSet = m_rsrcResolver.getQuery (query, rsrcCtx, 4);
m_rsrcSet.doSomethingElse ();
m_rsrcSetはnull値を取得し、デバッグは、期待値を使用する代わりに、nullMockRsrcResolverを呼び出すことを示します...この方法でそれを行うのは間違っていますか?あなたが持っているかもしれないアドバイスをありがとう!