java - 控制台输入和输出的 JUnit 测试

标签 java junit io console user-input

我只有一个方法 main.如何使用 JUnit 检查 System.out.println() 并替换 Scanner 自动输入值?

附注请提供一些解决方案...

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int[] arr = new int[4];

    for (int i = 0; i < arr.length; i++) {
        arr[i] = scanner.nextInt();
    }

    for (int i = 0; i < arr.length; i++) {
        int res = 0;
        int k = 0;
        int num = arr[i];
        /*.....*/
        System.out.println(num);
    }
}

最佳答案

理想情况下,提取尴尬的依赖项,以便您可以在没有它们的情况下进行测试。将 main 更改为简单的:

public static void main(String[] args) {
  doWork(new Scanner(System.in), System.out);
}

// TODO: Rename to something meaningful
public static void doWork(Scanner input, PrintStream output) {
  // Remainder of code
}

(考虑使用 Writer 而不是 PrintStream 进行输出。)

那么您实际上并不需要对 main 进行单元测试 - 但您可以使用基于 Scanner 来测试 doWork StringReader,以及基于 StringWriter 的输出,提供您想要的任何输入并检查输出。

关于java - 控制台输入和输出的 JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12331696/

相关文章:

junit - 如何在 Junit 测试的 Jenkins 控制台输出中放置粗体文本和格式?

Java 文件 IO 异常

java - 如何让 "Migrate to JUnit 5"选项出现在 Intellij IDEA 中?

java - 我的解决方案中缺少什么?凸包查找算法

java - Gradle 插件用于读取 secret (api-key、密码)属性(例如 Android 插件中的 buildConfigField)

java - 为 maven-compiler-plugin 设置默认的 jdk

maven - 如何对 PlayN 项目进行单元测试?

c# - 如何使用最少的锁定访问文件

c# - 在windwos8中创建文件夹访问被拒绝

java - 如何从java中的链表中删除一个对象