20

这似乎是一个超级简单的问题,但我就是想不通。

我只是想断言一个字符串等于“string1”或“string2”。

这是我尝试过的,但显然都不起作用。

assertEquals(d.getFormType(), "string1") || assertEquals(d.getFormType(), "string2");

assertEquals(d.getFormType(), "string1" || "string2");
4

6 回答 6

32

我建议你使用Hamcrest匹配器。它们通过 集成到 JUnit 中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));
于 2012-10-04T14:20:31.743 回答
22

你可以使用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"));
于 2012-10-04T14:16:58.643 回答
4

断言类没有直接的方法来做你想做的事。但是您可以随时退回assertTrue并检查您想要的任何条件。

assertTrue("string1".equals(d.getFormType()) || "string2".equals(d.getFormType()))
于 2012-10-04T14:17:41.907 回答
1

怎么样

Assert.assertTrue("msg", Arrays.asList("string1", "string2").contains(searchString));

如果失败,我会将 msg 更新为一个很好的友好消息。

于 2012-10-04T14:21:06.457 回答
0

我不知道这样做的确切 JUnit 风格,但我会做一些更简单的事情:

boolean stringEquals = false;
if ("string1".equals(d.getFormType()) || "string2".equals(d.getFormType())) {
    stringEquals = true;
}
assertTrue(stringEquals);
于 2012-10-04T14:17:45.990 回答
0

你的问题没有意义。单元测试总是有相同的结果——它们不是随机的,或者更确切地说,它们不应该是随机的。这就是 JUnit 不支持交替结果的原因。

尝试找到一种方法来设置测试,使输出不会改变。

如果这真的不可能,那么您的代码或至少它的设计可能有问题。

尝试解决这个问题。

如果你真的不能,那么你可以使用:

boolean valid = ....some complex check...
assertTrue( valid );

[编辑]要一次测试多个值,您可以使用以下技巧:

String[] values = ...;
assertEquals( "0:...\n1:...",  "0:" + values[0] + "\n" + "1:" + values[1] ... );

即,您将所有值放入一个长字符串中,然后检查整个字符串。大多数 IDE 会并排显示两个文本编辑器中的差异,因此任何不匹配都会很容易看到 +0:文本中的小提示 ( , ...) 会告诉您错误的确切位置。

于 2012-10-04T14:19:10.803 回答