如何测试在Java中调用System.exit()的场景?

时间:2011-06-13 20:53:27

标签: java unit-testing static mocking mockito

  

可能重复:
  Java: How to test methods that call 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来嘲笑它。那么我该怎么做:

  1. 为了此测试而暂停现有行为。
  2. 编写第二个测试,确认退出已发生。 (仅在调用System.exit()时成功的测试,否则失败。)

1 个答案:

答案 0 :(得分:1)

我使用以下非常简单的场景:我使用Groovy - MockFor可以保证调用某些方法。我试过,它甚至适用于System类。