gpt4 book ai didi

java - Java 控制台输入法的单元测试

转载 作者:太空宇宙 更新时间:2023-11-04 13:04:56 25 4
gpt4 key购买 nike

如何对以下方法进行单元测试?

public static String grabString() {
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
do {
try {
// call the readline method of the buffered reader object.
return r.readLine();
} catch (Exception e) {
}
} while (true);}

如果我像这样从测试类调用这个方法

String getInput = grabString();

并测试它

assertEquals(getInput, "hello");

是否可以使用代码在控制台中输入“hello”而不需要打字,以便单元测试立即运行?

最佳答案

我建议您不要使用静态方法,而是使用一个带有 InputStream 作为字段的对象(最终是单例)。然后您可以在生产代码中使用真实的 System.in 并在测试中使用虚假的 InputStream。

类似这样的事情:

public class MyStreamReader {

private InputStream in;

public MyStreamReader(InputStream in) {
this.in = in;
}

public String grabString() {
BufferedReader r = new BufferedReader(new InputStreamReader(in));
do {
try {
// call the readline method of the buffered reader object.
return r.readLine();
} catch (Exception e) {
}
} while (true);
}

}

在生产代码中,您将使用 System.in 流构造实例(例如 new MyStreamReader(System.in))。

在测试中,您将使用假输入流进行测试:

@Test
public void testGrabString() throws Exception {
String expected = "test input from console";
ByteArrayInputStream fakeIS = new ByteArrayInputStream(expected.getBytes());
MyStreamReader myStreamReader = new MyStreamReader(fakeIS);

String actual = myStreamReader.grabString();
assertEquals(expected, actual);
}

关于java - Java 控制台输入法的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34577481/

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