可能重复:
Java:如何测试调用System.exit()的方法?
在某个场景中,我想测试应用程序是否调用函数来发送电子邮件,然后调用System.exit(0)
这是一个Java应用程序,Mockito正被用于嘲讽。
我的测试目前看起来像这样:
testSendsEmailInScenario() {
// set up
foo.bar(mock);
ArgumentCaptor<HashMap> argument = ArgumentCaptor.forClass(HashMap.class);
verify(mockEmailDeliveryManager).send(argument.capture());
Map<String,String> argMap = argument.getValue();
// Test that map contains the right stuff
}
因此,这不起作用,因为在应用程序中调用send
之后,会调用System.exit()
,这将终止测试,而测试不会成功或失败。
由于exit()
是System
的静态方法,所以我不能用Mockito来模拟它。那么我该怎么做:
- 为了这个测试,暂停正在退出的行为
- 编写第二个测试,以确认退出已发生。(仅当调用
System.exit()
时才成功的测试,否则将失败。)
我使用以下非常简单的场景:我使用Groovy-MockFor,它可以为您保证调用某个方法。我试过了,它甚至可以用于System类。