当前位置: 首页 > 面试题库 >

Java 具有模拟用户输入的JUnit测试

毛声
2023-03-14
问题内容

我正在尝试为需要用户输入的方法创建一些JUnit测试。被测方法看起来类似于以下方法:

public static int testUserInput() {
    Scanner keyboard = new Scanner(System.in);
    System.out.println("Give a number between 1 and 10");
    int input = keyboard.nextInt();

    while (input < 1 || input > 10) {
        System.out.println("Wrong number, try again.");
        input = keyboard.nextInt();
    }

    return input;
}

有没有一种方法可以自动将程序传递给int而不是我或其他人在JUnit测试方法中手动执行此操作?像模拟用户输入一样?

提前致谢。


问题答案:

你可以通过调用System.setIn(InputStream in)来用自己的流替换System.in。InputStream可以是一个字节数组:

InputStream sysInBackup = System.in; // backup System.in to restore it later
ByteArrayInputStream in = new ByteArrayInputStream("My string".getBytes());
System.setIn(in);

// do your thing

// optionally, reset System.in to its original
System.setIn(sysInBackup);

通过将IN和OUT作为参数传递,不同的方法可以使此方法更具可测试性:

public static int testUserInput(InputStream in,PrintStream out) {
    Scanner keyboard = new Scanner(in);
    out.println("Give a number between 1 and 10");
    int input = keyboard.nextInt();

    while (input < 1 || input > 10) {
        out.println("Wrong number, try again.");
        input = keyboard.nextInt();
    }

    return input;
}


 类似资料:
  • 本节介绍与JUnit Framework相关的各种模拟测试。 您可以在本地计算机上下载这些示例模拟测试,并在方便时离线解决。 每个模拟测试都提供一个模拟测试密钥,让您自己验证最终得分和评分。 JUnit Mock Test I 问题1 - 以下哪项描述正确测试? A - 测试是检查应用程序功能的过程,是否按照要求运行。 B - 测试是单个实体(类或方法)的测试。 C - 以上两者。 D - 以上都

  • 我需要使用Python程序来计算一些东西并得到结果。这个Python程序需要一个很长的输入,所以我无法在调用该Python程序时将其作为参数传递。 这个问题我就简化一下。下面是一个等待用户输入并打印用户输入的Python程序。我想用Java来完成输入并得到Python程序打印的结果。 我尝试使用和来编写字符串,但两者似乎都不起作用。 这是我尝试到目前为止从Java进程与输入/输出流学习的代码:。

  • 我有一个jUnit测试,测试我的一个函数。在这个函数中,我调用了另一个类的方法,我想用mockito模拟这个方法。然而,我似乎不能实际嘲笑这一点。下面是我的jUnit测试的样子: 编辑:在我的MainClassImTesting()中。我正在调用的test()函数,它调用authenticateUser()并向它传递一个hashMap。

  • 问题内容: 问题: 我希望能够 在Java中 以通用方式访问 Java对象的 任何属性/字段,就像动态语言(例如Groovy,JavaScript)一样。在编写此管道代码时,我不知道它是什么类型的对象或属性/字段名称是什么。但是当我使用它时,我将知道属性/字段名称。 我当前的解决方案: 到目前为止,我已经编写了一个简单的包装器类,该包装器类用于获取Bean / POJO的属性并将其公开为。它很粗糙

  • 问题内容: 我有一个Java命令行程序。我想创建JUnit测试用例以进行模拟。因为当我的程序运行时,它将进入while循环并等待用户输入。如何在JUnit中模拟呢? 问题答案: 从技术上讲,可以进行切换,但是总的来说,不直接在代码中调用它,而是添加一层间接层,这样输入源就可以从应用程序的某个位置进行控制,这样会更健壮。确切地讲,这是实现的详细信息-依赖项注入的建议很好,但是你不一定需要引入第三方框

  • 问题内容: 我正在使用JUnit编写集成测试,以自动化基于控制台的应用程序的测试。该应用程序是家庭作业,但这不是家庭作业。我想使这些测试自动化以提高生产率- 我不想回头再重新测试应用程序中已经测试过的部分。(使用单元测试的标准原因) 无论如何,我找不到或找不到有关捕获输出的文章,因此我不能这样做,也不能提供自动输入。我不在乎输出/输入是否进入控制台/输出窗格。我只需要执行测试并验证输出是否与输入相