gpt4 book ai didi

java - JUnit 测试一个要求用户输入的方法

转载 作者:行者123 更新时间:2023-11-30 08:15:39 24 4
gpt4 key购买 nike

我必须测试别人的无休止运行但要求输入的方法:

public void automatize()
{
String cadena = new String();

while(true)
{
System.out.println("Executing...(Enter command)");
System.out.println("Enter Q to exit");
Scanner sc= new Scanner(new InputStreamReader(System.in));
cadena=sc.nextLine();
if(cadena.toLowerCase().equals("q"))
break;
String[] command = str.split(" ");
if(comando.length!=0)
new Extractor().run(command);
}
}

我应该如何使用 JUnit 对其进行测试?

这是我尝试做的,但是,好吧,它实际上没有做任何事情:

@Test
public void testAutomatize_q() {
ByteArrayInputStream in = new ByteArrayInputStream("Q".getBytes());
System.setIn(in);

extractor.automatize();

System.setIn(System.in);
}

最佳答案

您可以通过调用 System.setIn(InputStream in) 将 System.in 替换为您自己的流。输入流可以是字节数组:

ByteArrayInputStream in = new ByteArrayInputStream("My string".getBytes());
System.setIn(in);

// do your thing

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

不同的方法可以通过将 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 testing with simulated user input

关于java - JUnit 测试一个要求用户输入的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28765499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com