java - 更改 System.in 并使扫描仪使用一个 ByteArrayInputStream?

标签 java testing junit user-input

我的任务是编写一个测试程序来评估学生的作业是否有效。 学生们正在用 Java 编写一个石头、剪刀、布游戏,并提交一个类,通过要求用户在命令行中输入来玩 n 轮游戏。 所有这些学生都将使用一个或多个 Scanner 对象从控制台读取输入,因此我需要让我的测试程序模拟一些预定的输入并检查预期的输出。 我重写 System.in,因此当学生调用 Scanner myReader = new Scanner(System.in); 时,我可以指定输入是什么(使用 ByteArrayInputStream)。 要了解我是如何开始的:

public class TestRockPaperScissors extends RockPaperScissors{
public static void main(String[] args){
    InputStream stdin = System.in;
    try {
    System.setIn(new ByteArrayInputStream("<test inputs here>".getBytes()));
    RockPaperScissors.main(null); // This will be student code in another file.
    } finally {
        System.setIn(stdin);
    }

}

问题是,这仅在学生仅使用 System.in 创建单个扫描仪时才有效。否则,我会收到错误,因为没有输入可供第二个扫描仪使用 .next() 。

TL;DR...如果我看不到 RockPaperScissors.main(null) 调用的源,如何模拟任意数量的扫描仪的控制台输入?

最佳答案

您可以使用 System RulesStandardOutputStreamLogTextFromStandardInputStream 规则为命令行界面编写更清晰的测试。图书馆。

public class RockPaperScissorsTest() {
  @Rule
  public StandardOutputStreamLog log = new StandardOutputStreamLog();

  @Rule
  public TextFromStandardInputStream systemInMock = emptyStandardInputStream();

  @Test
  public void test1() {
    systemInMock.provideText("<test input>");
    RockPaperScissors.main(null);
    assertTrue(log.getLog().contains("<expected output>"));
  }

  @Test
  public void test2() {
    systemInMock.provideText("<another test input>");
    RockPaperScissors.main(null);
    assertTrue(log.getLog().contains("<expected output>"));
  }
}

关于java - 更改 System.in 并使扫描仪使用一个 ByteArrayInputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14918372/

相关文章:

Java - 将字节转换为兆字节

git:管理输入数据测试实践

android - 没有构建应用程序的 Phonegap : Fast way of testing Camera-Functions,

Android Studio 1.1 preview 2 单机测试运行NullPointerException

java - 使用 Spring Test 执行 SQL 脚本正在提交更改

java - 为什么我的 `main()` 没有捕获在 junit 测试中 `timer` 中抛出的异常?

java - java中的骰子求和应用程序。我遇到索引错误并且我设计了错误的代码但我不知道在哪里

java - gcj 错误 - 找不到类 java.util.function.Predicate 的文件

java - 测试基于控制台的应用程序/程序 - Java

java - 允许格式化/缩进/清理 JSP 代码的最佳 Eclipse 免费插件是什么?