我遇到了一个与Easymock有关的问题,我试图让一个模拟期待一些无效的调用。但是我有一个问题就是模拟失败了。
所以我期待调用persistConfiguration(Map),我绝对不会被调用。但测试通过了所有相同的。
我的模拟界面如下所示:
public abstract class MyMockedClass{
public abstract void start() throws Exception;
public abstract void stop() throws Exception;
public abstract void persistConfiguration(Map<String, Object> newConfiguration) throws Exception;
}
测试看起来像这样
@RunWith(EasyMockRunner.class)
public class MyFailingTest{
@Mock
private MyMockedClass provider;
....
@Before
public void setUp() throws Exception{
Map<String, Object> expectedSetConfig = new HashMap<>();
expectedSetConfig.put("String", setString);
expectedSetConfig.put("File", testFile2.getCanonicalPath());
/*Expect*/provider.start();
expectLastCall().atLeastOnce();
/*Expect*/provider.persistConfiguration(expectedSetConfig);
expectLastCall().times(1);
/*Expect*/provider.stop();
expectLastCall().atLeastOnce();
replay(provider);
}
}
如果我删除期望provider.start()
和匹配的getLastCall
调用,则测试将失败并显示消息
意外的方法调用MyMockedClass.start(): MyMockedClass.persistConfiguration({String = newString,File = C:\ workspace \ meh \ stuff}):expected:1,actual:0 MyMockedClass.stop():预期:至少1,实际:0
因此测试可能会失败,但我的问题是:如果调用start
,stop
或persistConfiguration
方法,我如何使测试失败?
如果使用除包含这些特定值的映射之外的任何东西调用persistConfiguration方法,则会失败。
答案 0 :(得分:0)
我发现了问题。
考试结束后我忘了给verify(provider)
打电话。
设置
/*Expect*/provider.start();
expectLastCall().atLeastOnce();
只告诉模拟人员期待这个电话。除非您致电.atLeastOnce()
verify
部分