我的 EasyMock 预期方法被认为是意外的,尽管我没有使用和严格模拟,并且该方法在被回复之前已经声明。
在这行代码中测试失败:
Intent batteryIntent = context.getApplicationContext().registerReceiver(null,
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
测试:
@Before
public void setUp() {
mocksControl = createControl();
contextMock = mocksControl.createMock(Context.class);
//(...)
}
@Test
public void test() {
expect(contextMock.getApplicationContext()).andReturn(contextMock).anyTimes();
expect(contextMock.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)))
.andReturn(someIntent1).once();
expect(contextMock.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)))
.andReturn(someIntent2).once();
mocksControl.replay();
//(...) tested method is invoked on class under the test
}
我得到的错误:
java.lang.AssertionError:
Unexpected method call Context.registerReceiver(null, android.content.IntentFilter@c009614f):
Context.registerReceiver(null, android.content.IntentFilter@c009614f): expected: 1, actual: 0
Context.registerReceiver(null, android.content.IntentFilter@c009614f): expected: 1, actual: 0
最佳答案
当你写类似的东西时,
expect(contextMock.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)))
.andReturn(someIntent1).once();
Easymock 期望调用 registerReceiver
方法时使用它被告知期望的确切参数,
因此,为了避免这种情况,在期望任何方法并编写其行为的同时,使用 anyObject() 方法,如下所示:-
expect(contextMock.registerReceiver(null, EasyMock.anyObject(IntentFilter.class)))
.andReturn(someIntent1).once();
由此,当 IntentFilter
的任何对象作为参数传递时,easymock 明白它必须模拟所有对预期方法的调用
希望对您有所帮助! 祝你好运!
关于java - EasyMock "Unexpected method call"尽管有 expect 方法声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31966388/