我执行了一个简单的测试用例(在jobss-ejb环境中),它比较/断言2个字符串。
不幸的是,字符串彼此不匹配(有一个错误)。
问题是,当我从 eclipse 执行测试用例时,它将结果记录为失败,这是正确的,因为预期之间存在不匹配和实际的对象;
当我从 ant 执行相同的测试用例时,结果记录为错误。
这真的很奇怪并且令人惊讶并且为了添加更多内容,这种行为在 junit 4 version only 上被注意到,当我在junit 3.8上执行测试用例时,ant和eclipse都记录了结果是失败。
对可能出错的任何建议或指示?
提前致谢:)
Ant-version:1.6.1 Junit版本:4.10
答案 0 :(得分:1)
好的,我进一步挖掘并发现这与任何特定的应用程序服务器无关。它可以在任何应用服务器上复制 只需创建一个示例(junit4)测试用例,如下所述:
@Test
public void stringTest() {
org.junit.Assert.assertEquals("Comparing 2 string:", "abc", "xyz");
}
现在,从eclipse运行它;你会看到结果为1失败。 使用 ant(或maven)目标通过某个应用服务器运行相同的操作,您将得到错误结果。
完成日志之后我认为这必须是因为junit4 org.junit.Assert.assertEquals(String message,Object expected,Object actual)方法抛出 ComparisonFailure 而不是 AssertionError 即可。 我对此的分析是junit4 assert()方法(org.junit.Assert.assertEquals(String,Object,Object))仅针对String实例抛出ComparisonFailure。 以下是org.junit.Assert.assertEquals( junit4 断言方法)的代码:
static public void assertEquals(String message, Object expected, Object actual) {
if (expected == null && actual == null)
return;
if (expected != null && isEquals(expected, actual))
return;
else if (expected instanceof String && actual instanceof String) {
String cleanMessage= message == null ? "" : message;
throw new ComparisonFailure(cleanMessage, (String) expected,
(String) actual);
} else
failNotEquals(message, expected, actual);
}
这是junit.framework.Assert.assertEquals(String,Object,Object)的代码(即 junit3 断言方法)
static public void assertEquals(String message, Object expected, Object actual) {
if (expected == null && actual == null)
return;
if (expected != null && expected.equals(actual))
return;
failNotEquals(message, expected, actual);
}
可以观察到,在 junit4 assertEquals()中,为不相等的String实例添加了额外的检查,该实例为两个不相等的字符串抛出 ComparisonFailure 。对于所有其他不等的对象,如整数,长整数等。调用转到 failNotEquals()方法,该方法抛出 AssertionError 。
任何人都可以帮助我理解在junit4的org.junit.Assert.assertEquals()方法中添加String实例检查的设计意义。为什么它真的被添加,为什么只有String?
答案 1 :(得分:1)
如上所述,测试结果行为的差异是因为 ant版本问题。对于较低版本的ant,您将获得此类行为(可能是因为较低的ant版本将 ComparisonFailure 视为错误而非失败)。 我在 ant version 1.7.1 (和更低版本)中发现了这种行为。但是在最新的 ant jar 即 1.8.4 中解决了问题。 当我在最新的ant版本上执行上述测试用例时,结果被记录为失败并且没有错误。 所以,如果您遇到这样的问题只需将您的ant jar更新为1.8.4 或其他最新版本。