0

我目前在 Eclipse Helios 之上的 JUnit 4 之上运行 Hamcrest 1.3RC,关于 Hamcrest 只有一件事困扰我:错误消息是错误的。而不是“预期:<预期值>,但是:<实际值>”,我得到“预期:<实际值>,但是:<预期值>”。

我的意思是,这不是什么大事,但是来吧^^ 真的没有一个在其他方面做得如此出色的 Hamcrest 开发人员注意到这一点吗?或者这是我的环境独有的错误?只要告诉我你是否也有它,或者没有它,甚至更好,你知道修复这个错误的方法。

我用 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(... is(...))。

4

2 回答 2

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'));

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

于 2011-03-16T01:53:58.300 回答
0

阅读 API 文档:

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

所有 JUnit assertXxx 方法都首先具有预期值,其次是实际值。您只是以错误的顺序调用带有参数的方法。

尝试

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

你会没事的。

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

于 2012-01-11T14:58:36.023 回答