Hamcrest& JUnit& Eclipse:错误的错误信息

时间:2011-03-13 17:44:58

标签: eclipse junit hamcrest

我目前正在Eclipse Helios之上的JUnit 4上运行Hamcrest 1.3RC,而且只有一件事让我困扰Hamcrest:错误信息是错误的。而不是“预期:< expectedvalue>,但是:< actualvalue>”,我得到“预期:< actualvalue>,但是:< expectedvalue>”。

我的意思是,这不是一件大事,但是来吧^^真的没有一个Hamcrest开发人员,他们在其他方面做得如此出色,注意到了这一点?或者这是我的环境独有的错误?只要告诉我你是否已经拥有它或者没有它甚至更好,你知道一种解决这个bug的方法。

我用Hamcrest 1.2和1.3RC都尝试过,但都没有正确使用它。 TIA有任何暗示。

一些代码来说明这个问题(名字部分是德语,我希望没关系):

Produkt p2 = pdao.getProdukt("Kekse");
assertNotNull(p2);
assertEquals(p2.getName(), "Kekse");
assertThat(p2.getPreis().doubleValue(), closeTo(2.57, 0.01));
assertEquals(p2.getFuellmenge(), 200);
assertEquals(p2.getFuelleinheit(), "G");
assertEquals(p2.isUeber18(), false);
assertEquals(p2.isAktiv(), true);

[EDIT2]使用Hamcrest专门解决了这个问题。从现在开始我要避免使用assertEquals(...,...)这个东西,而不是assertThat(...是(...))。

2 个答案:

答案 0 :(得分:3)

我将Hamcrest用于Java和PHP,但没有这个问题。我怀疑你是在实际值之前传递了期望值,这是旧的xUnit断言的方式。 Hamcrest选择了更易读的结构。

以下是MatcherAssert.assertThat()的简化声明:

void assertThat(T actual, Matcher<T> matcher)

传递实际值,然后将匹配器与预期值相关联。您可以选择在实际值之前传递更具描述性的消息。

void assertThat(String reason, T actual, Matcher<T> matcher)

以下是一些例子:

assertThat(add(2, 4), is(6));
assertThat($fruit->hasSeeds(), is(true));
assertThat($fruit->getColor(), containsString('red'));

始终在您的问题中包含源代码。它增加了你被回答的机会 - 更重要的是 - 正确地回答 。 ;)

答案 1 :(得分:0)

阅读API文档:

http://www.junit.org/apidocs/org/junit/Assert.html

所有JUnit assertXxx方法都有expectedValue,其次是actualValue。您只是使用错误顺序的参数调用方法。

尝试

assertEquals("Kekse", p2.getName());

你会没事的。

总的来说,这是一个很好的建议:在使用API​​之前阅读文档;)