【问题标题】:How to test a scenario that calls System.exit() in Java? [duplicate]如何测试在 Java 中调用 System.exit() 的场景? [复制]
【发布时间】:2011-09-14 05:45:40
【问题描述】:

可能重复:
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() 时测试成功,否则失败。)

【问题讨论】:

    标签: java unit-testing static mocking mockito


    【解决方案1】:

    我使用以下非常简单的场景:我使用 Groovy - MockFor 可以为您保证调用某些方法。我试过了,它甚至可以与系统类一起使用。

    【讨论】:

    • 很有趣,但我希望不要引入新的依赖项。不过我会记住的。
    猜你喜欢
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多