Java JUnit测试具有多个可接受答案
在JUnit测试中是否可能有多个被接受的答案?例如:Java JUnit测试具有多个可接受答案,java,junit,junit4,assert,Java,Junit,Junit4,Assert,在JUnit测试中是否可能有多个被接受的答案?例如: Main rock = new Main(); Assert.assertEquals("y", boxes("23")); 因此,对于这个测试,我希望能够接受结果字符串“y”或“n”作为可接受的答案,这可能吗?您可以这样做,但不能使用assertEquals()。尝试以下方法: Assert.assertTrue(boxes("23").equals("y") || boxes("23").equals("n")); 如果您
Main rock = new Main();
Assert.assertEquals("y", boxes("23"));
因此,对于这个测试,我希望能够接受结果字符串“y”或“n”作为可接受的答案,这可能吗?您可以这样做,但不能使用
assertEquals()
。尝试以下方法:
Assert.assertTrue(boxes("23").equals("y") || boxes("23").equals("n"));
如果您有多个可能的答案,则设置可能更容易
Set<String> possibleAnswers = new HashSet<>();
possibleAnswers.add("y");
possibleAnswers.add("n");
...
Assert.assertTrue(possibleAnswers.contains(boxes("23")));
Set possibleAnswers=new HashSet();
可能的答案。添加(“y”);
可能的回答。添加(“n”);
...
Assert.assertTrue(可能的答案包含(框(“23”));
使用Hamcrest CoreMatcher(包括在JUnit 4.4和更高版本中)和assertThat():
除了这是可能的(例如见@dev)之外,这被认为是一种不好的做法
在同一输入上返回不同结果的方法必须(!)包含非确定性源。要解决这个问题,请正确地模拟它,结果只有一个
接受多个答案的一种解释是,assert方法是从多个测试调用的,这些测试只断言结果的一个泛型属性。通用属性可以更轻松地进行测试。擅长于此
import static org.assertj.core.api.Assertions.assertThat;
assertThat(boxes("23")).isIn("y", "n);
与hamcrest相比,assertj的最大优点是易于使用代码完成。是否有任何导入文件?我收到一个“无法解析方法”错误,您正在使用哪个junit版本。如果小于4.4,则使用assertj,如果无法满足预期,truth或hamcrest将生成更好的消息。建议的解决方案失败得很糟糕,因为“预期为true,但为false”
import static org.assertj.core.api.Assertions.assertThat;
assertThat(boxes("23")).isIn("y", "n);