【问题标题】:Java: How to AUTOMATICALLY test a console application that gets input from userJava:如何自动测试从用户那里获取输入的控制台应用程序
【发布时间】:2016-12-02 09:04:04
【问题描述】:

我正在用 Java 编写一个控制台应用程序,它通过以下方式从用户那里获取输入 “扫描仪”类。我不想每次在控制台中手动测试程序时都输入输入,所以我想将所有输入放在一个文本文件中,并让 Java 程序读取这个文本文件,而不是再次输入输入。

我发现这样做的方式是换行:

Scanner sc = new Scanner(System.in);

到:

Scanner sc = new Scanner(new File(path_to_text_file));

您能否推荐另一种不涉及更改代码的方法?

【问题讨论】:

    标签: java file testing java.util.scanner


    【解决方案1】:

    既然你想用这个来测试,最好的方法是为这个类编写一个测试。看看JUnit

    在这样的测试中,您可以为您的原始课程提供不同的扫描仪,或者使用

    Scanner sc = new Scanner(new File(path_to_text_file));

    或者您可以使用像Mockito 这样的框架,以便通过扫描仪伪造不同的用户输入,然后检查这些输入是否产生了正确的输出。

    【讨论】:

      【解决方案2】:

      如果您绝对无法更改代码,请使用System.setIn 将默认输入流替换为您选择的一个。

      确保在完成测试后始终将流更改回原始流 - 这样做会改变全局状态,因此您可以在其余测试中将事物置于不良状态。

      InputStream previousIn = System.in;
      InputStream replacement = new FileInputStream(path_to_text_file);
      System.setIn(replacement);
      try {
        // ... Do your testing.
      } finally {
        System.setIn(previousIn);
      }
      

      或者,改变你的代码设计,使你inject the input stream that you depend on。这避免了全局状态的突变,这是一件好事。

      【讨论】:

        猜你喜欢
        • 2014-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-17
        • 1970-01-01
        • 2017-11-26
        • 1970-01-01
        相关资源
        最近更新 更多