use*_*669 9 java junit mocking
我正在为java编程竞赛编写一些代码.程序的输入是使用stdin给出的,输出是在stdout上.你们如何测试在stdin/stdout上运行的程序?这就是我的想法:
由于System.in的类型为InputStream,而System.out的类型为PrintStream,因此我使用此原型在func中编写了我的代码:
void printAverage(InputStream in, PrintStream out)
Run Code Online (Sandbox Code Playgroud)
现在,我想用junit来测试它.我想使用String伪造System.in并在String中接收输出.
@Test
void testPrintAverage() {
String input="10 20 30";
String expectedOutput="20";
InputStream in = getInputStreamFromString(input);
PrintStream out = getPrintStreamForString();
printAverage(in, out);
assertEquals(expectedOutput, out.toString());
}
Run Code Online (Sandbox Code Playgroud)
实现getInputStreamFromString()和getPrintStreamForString()的"正确"方法是什么?
我这让它变得比它需要的更复杂吗?
请尝试以下方法:
String string = "aaa";
InputStream stringStream = new java.io.ByteArrayInputStream(string.getBytes())
Run Code Online (Sandbox Code Playgroud)
stringStream 是一个将从输入字符串中读取chard的流.
OutputStream outputStream = new java.io.ByteArrayOutputStream();
PrintStream printStream = new PrintStream(outputStream);
// .. writes to printWriter and flush() at the end.
String result = outputStream.toString()
Run Code Online (Sandbox Code Playgroud)
printStream是一个PrintStream将写入outputStream,然后将能够返回一个字符串.
| 归档时间: |
|
| 查看次数: |
10921 次 |
| 最近记录: |