这似乎是一个非常简单的问题,但我无法弄明白。
我只是试图断言字符串等于“string1”或“string2”。
这是我尝试过的,但显然都不起作用。
assertEquals(d.getFormType(), "string1") || assertEquals(d.getFormType(), "string2");
assertEquals(d.getFormType(), "string1" || "string2");
答案 0 :(得分:27)
我建议您使用 Hamcrest 匹配器。它们已通过assertThat()
集成到JUnit中,但您也需要下载并安装hamcrest-all.jar。
使用Hamcrest,你可以像这样解决你的问题:
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
assertThat(d.getFormType(), isOneOf("string1", "string2"));
另一种选择,如果你不能安装Hamcrest,那就是使用正则表达式:
assertTrue(d.getFormType().matches("(string1|string2)"));
这比组合两个equals()
语句更短,更有可读性:
String actual = d.getFormType();
assertTrue("string1".equals(actual) || "string2".equals(actual));
答案 1 :(得分:18)
您可以使用assertTrue()
:
assertTrue(d.getFormType().equals("string1") ||
d.getFormType().equals("string2"));
或使用扩展版本在发生故障时提供更多信息:
assertTrue("Unexpected value for d.getFormType(): " + d.getFormType(),
d.getFormType().equals("string1") ||
d.getFormType().equals("string2"));
答案 2 :(得分:4)
断言类没有直接的方法来做你想要的。但是你总是可以回到assertTrue
并检查你想要的任何条件。
assertTrue("string1".equals(d.getFormType()) || "string2".equals(d.getFormType()))
答案 3 :(得分:1)
怎么样
Assert.assertTrue("msg", Arrays.asList("string1", "string2").contains(searchString));
如果失败,我会更新msg是一个很好的友好消息。
答案 4 :(得分:0)
我不知道这样做的确切JUnit风格,但我会做一些更简单的工作:
boolean stringEquals = false;
if ("string1".equals(d.getFormType()) || "string2".equals(d.getFormType())) {
stringEquals = true;
}
assertTrue(stringEquals);
答案 5 :(得分:0)
你的问题没有意义。单元测试总是有相同的结果 - 它们不是随机的,或者更确切地说,不应该。这就是JUnit不支持交替结果的原因。
尝试找到一种方法来设置测试,使输出不会改变。
如果真的不可能,那么你的代码或者至少它的设计可能有问题。
尝试解决此问题。
如果你真的不能,那么你可以使用:
boolean valid = ....some complex check...
assertTrue( valid );
[编辑] 要一次测试多个值,您可以使用此技巧:
String[] values = ...;
assertEquals( "0:...\n1:...", "0:" + values[0] + "\n" + "1:" + values[1] ... );
即。您将所有值放入一个长字符串,然后检查整个字符串。大多数IDE会并排显示两个文本编辑器的差异,因此任何不匹配都很容易看到+文本中的小提示(0:
,...)将告诉您错误的确切位置。