如何用Java编写JUnit测试,该测试检查依赖于循环中用户输入的一个特定打印

如何用Java编写JUnit测试,该测试检查依赖于循环中用户输入的一个特定打印,java,unit-testing,testing,intellij-idea,junit,Java,Unit Testing,Testing,Intellij Idea,Junit,我尝试用IntelliJ为应用程序编写JUnit测试,该应用程序修改字符串。现在我如何在控制台上测试一个特定的打印 假设起始字符串存储在args[0]中为“Hello World”,我们有一个方法可以更改字符串中的单个字母。该字符串将在方法执行后打印出来 public class modifyString { public static void main(String[] args) { Scanner scanner = new Scanner(System.i

我尝试用IntelliJ为应用程序编写JUnit测试,该应用程序修改字符串。现在我如何在控制台上测试一个特定的打印

假设起始字符串存储在args[0]中为“Hello World”,我们有一个方法可以更改字符串中的单个字母。该字符串将在方法执行后打印出来

public class modifyString {
    public static void main(String[] args) {

          Scanner scanner = new Scanner(System.in);

          while(true) {
              // Print the string
              System.out.println(args[0]);

              // Wait for a userinput that only contains two chars,
              // e.g. '0h' <- 'Change the index 0 to 'h''
              // (the order of the chars is unimportant)
              String input = scanner.nextLine();

              if(preconditionFullfilled(input)) {
                  executeOperation(input, args);
              }
         }
    }
}
公共类修改字符串{
公共静态void main(字符串[]args){
扫描仪=新的扫描仪(System.in);
while(true){
//打印字符串
System.out.println(args[0]);
//等待仅包含两个字符的userinput,

//例如,“0h”据我所知,如果您使用
System.out.
进行打印,则无法测试已打印的输出。我认为,如果您使用另一个PrintStream类,理论上是可能的,但我强烈建议您以使用字符串或StringBuilder作为返回类型并执行以下操作的方式更改代码:单独打印。因此您可以轻松地为所有方法编写单元测试

此外,如果您想测试写入的输出,您可以将输出写入一个.txt文件,并将内容与预期的结果文件进行比较。但是,这会进入集成测试,在这里基本上是多余的

我希望这对你有点帮助。 如果您还有其他问题,请询问。 当做
Kai

据我所知,如果您使用
System.out.
进行打印,则无法测试已打印的输出。我认为如果您使用另一个PrintStream类,理论上是可能的,但我强烈建议您以将字符串或StringBuilder用作返回类型并执行printi的方式更改代码因此,您可以轻松地为所有方法编写单元测试

此外,如果您想测试写入的输出,您可以将输出写入一个.txt文件,并将内容与预期的结果文件进行比较。但是,这会进入集成测试,在这里基本上是多余的

我希望这对你有点帮助。 如果您还有其他问题,请询问。 当做
卡伊

不应该测试控制台的打印。您可以考虑测试方法调用,其结果打印到控制台。您不应该测试控制台的打印。您可以考虑测试方法调用,其结果打印到控制台。