java - junit主要方法测试失败
问题描述
尽管我找不到原因,但我的 JUnit 主要方法测试给了我错误。我只在 3 个边满足三角形标准时才实施。预期输出和实际输出不匹配。但是在代码中输入和输出是相同的。
主要方法:
public class Demo {
public static void main(String[] args) {
// Reading from System.in
Scanner reader = new Scanner(System.in);
System.out.println("Enter side 1: ");
// Scans the next token of the input as an int.
int side_1 = reader.nextInt();
System.out.println("Enter side 2: ");
// Scans the next token of the input as an int.
int side_2 = reader.nextInt();
System.out.println("Enter side 3: ");
// Scans the next token of the input as an int.
int side_3 = reader.nextInt();
if (isTriangle(side_1, side_2, side_3)) {
System.out.println("This is a triangle.");
}
else {
System.out.println("This is not a triangle.");
}
reader.close();
}
}
junit test_main_program:
@Test
public void test_main_program() {
ByteArrayInputStream in=new ByteArrayInputStream("5\n6\n9\n".getBytes());
System.setIn(in);
ByteArrayOutputStream out=new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
//invoke
String[] args= {};
Demo.main(args);
String consoleOutput="Enter side 1:\n";
consoleOutput+="Enter side 2: \n";
consoleOutput+="Enter side 3:\n";
consoleOutput+="This is a triangle.\n" ;
assertEquals(consoleOutput,out.toString());
}
解决方案
尝试使用这个:
private static PrintStream orgPrintStream;
private static InputStream orgInputStream;
@BeforeClass
public static void beforeClass() {
orgPrintStream = System.out;
orgInputStream = System.in;
}
@AfterClass
public static void afterClass() {
System.setOut(orgPrintStream);
System.setIn(orgInputStream);
}
@Test
public void test_main_program() {
ByteArrayInputStream in = new ByteArrayInputStream("5\n6\n9\n".getBytes());
System.setIn(in);
ByteArrayOutputStream out = new ByteArrayOutputStream();
PrintStream printStream = new PrintStream(out);
System.setOut(printStream);
// invoke
String[] args = {};
Demo.main(args);
String consoleOutput = "Enter side 1: " + System.lineSeparator();
consoleOutput += "Enter side 2: " + System.lineSeparator();
consoleOutput += "Enter side 3: " + System.lineSeparator();
consoleOutput += "This is a triangle." + System.lineSeparator();
assertEquals(consoleOutput, printStream.toString());
}
推荐阅读
- javascript - Javascript get方法和airtable
- javascript - 尝试在提交表单时在 span 元素上设置内部 HTML - 不显示
- ios - ngx-translate 在 iOS 设备上不起作用(Cordova)
- java - 使用 FilterRowHeaderComposite 时正文层无法正确显示
- nginx - NGINX - 允许任何位置和别名
- python - 打印一个包含最多 n 个重复元素的列表
- spinnaker - 在我的 aws ec2 上安装 minnaker 后如何进入我的三角帆仪表板
- sql - Cosmos DB where 外部文档的条件
- python - python中的多目标/多变量约束优化
- c# - 将另一个列表中的列表转换为列表
在 C# 中