我目前正在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(...是(...))。
答案 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之前阅读文档;)