所以我有一个有点复杂的问题,我会用类似的例子来描述它,而不是复制大量的代码。问题在于我真的不知道如何很好地使用 JMockit,我敢说正确。
我有一个界面:
public interface IRsrcResolver {
RsrcSet getForQuery(Query, RsrcContext, int);
}
它有一个真正的实现——它有点激烈。所以我制作了一个只返回 null 的模拟版本。然后我想设置一个 [nonstrict] 期望,它将返回正确的值。它将测试更改为测试。
在代码中:
public class MockRsrcResolver implements IRsrcResolver {
RsrcSet getForQuery(Query, RsrcContext, int) { return null; }
}
在测试类中我实现它然后想要设置期望(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 得到一个空值,调试显示它调用了空 MockRsrcResolver,而不是使用期望......我这样做是不正确的吗?感谢您的任何建议!