这似乎是一个非常简单的问题,但我就是想不出来。
我只是想要断言一个字符串是否等于"string1"或者"string2"。
这是我尝试过的,但显然都不起作用。
assertEquals(d.getFormType(), "string1") || assertEquals(d.getFormType(), "string2");
assertEquals(d.getFormType(), "string1" || "string2");
assertThat()
集成,但是您还需要下载和安装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));
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"));
assertTrue()
能够执行到,它会告诉你result
是null。 - Aaron Digulla断言类没有直接实现你想要的功能。但是你可以使用 assertTrue
并检查任何条件来实现。
assertTrue("string1".equals(d.getFormType()) || "string2".equals(d.getFormType()))
怎么样?
Assert.assertTrue("msg", Arrays.asList("string1", "string2").contains(searchString));
如果失败,我会更新消息以便成为一个友好的信息。
我不知道有没有一个确切的JUnit风格来做这个,但是我会做一些更简单的事情来解决:
boolean stringEquals = false;
if ("string1".equals(d.getFormType()) || "string2".equals(d.getFormType())) {
stringEquals = true;
}
assertTrue(stringEquals);
你的问题没有意义。单元测试总是有相同的结果 - 它们不是随机的,或者说,它们不应该是随机的。这就是为什么 JUnit 不支持交替结果的原因。
尝试找到一种设置测试的方法,使输出不会改变。
如果真的不可能,那么你的代码或者至少它的设计可能存在问题。
尝试修复这个问题。
如果你真的无法解决,那么可以使用:
boolean valid = ....some complex check...
assertTrue( valid );
[编辑] 为了同时测试多个值,您可以使用以下技巧:
String[] values = ...;
assertEquals( "0:...\n1:...", "0:" + values[0] + "\n" + "1:" + values[1] ... );
即将所有值放入一个长字符串中,然后检查整个字符串。大多数IDE都会在两个文本编辑器并排显示差异,因此任何不匹配都很容易看到,而文本中的小提示(0:
等)将告诉您错误的确切位置。
and
而不是 or
。请查看我的编辑。 - Aaron Digullastring1,string2
。在我的方法中,我将该字符串拆分并搜索 string1
和 string2
,然后将结果组合并返回。因此,我想通过我的 JUnit 测试验证表单类型是 string1 或 string2 中的任意一个。明白吗? - Catfish