繁体   English   中英

如何测试程序已退出? [JUnit的]

[英]How to test the program has quit? [JUnit]

我正在尝试构建一个简单的应用,该应用具有如下的switch / case语句:

    public void handleUserInput(char input){
      switch(input) {
        case 'L':
            printBooksList();
            break;
        case 'Q':
            System.exit(0);
        default:
            System.out.println("The option you chose was invalid");
      }
    }

我正在尝试执行此TDD,以使用JUnit和Mockito学习一些基础知识。 但是我绝对不知道如何测试程序已退出。 我必须创建MyApp的对象,然后传入值'Q'退出的模拟InputStream,所以以某种方式不适合模拟。 即使此方法是公共方法,也不是我可以验证通过模拟调用的方法。

有人知道如何进行此操作吗?

我知道这个答案,但是我没有测试静态方法,而让另一个构造函数传入模拟出的System似乎是过大了。

这是我编写的测试,从我链接到的问题中获取答案:

    @Test
    public void shouldCallSystemExit() {
      inputStream = new ByteArrayInputStream("X".getBytes());
      testSubject = new BibliotecaApp(inputStream);
      PowerMockito.mockStatic(System.class);

      testSubject.handleUserInput('Q');

      PowerMockito.verifyStatic();
      System.exit(0);

      System.out.println("If this message displays them System.exit() was mocked successfully");
  }

但是,这将依赖性问题扔到了左右中间! 我必须下载5个jar才能使PowerMock正常工作,但仍然需要hamcrest / SelfDescribing。 这可能不对,我将以这种速度下载所有内容。

有几种方法可以在JUnit测试中测试System.exit()

  1. PowerMock模拟
  2. 调用一个方法,该方法调用System.exit()并在测试中覆盖此方法。
  3. 使用系统规则库 (向Stefan Birkner表示感谢)

原因是System.exit()从不返回,因此控件从不返回到测试。 因此,您必须确保未调用实际方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM