0

私は現在、EclipseHelios上でJUnit4上でHamcrest1.3RCを実行していますが、Hamcrestについて気になることが1つだけあります。それは、エラーメッセージが間違った方法であるということです。「Expected:<expectedvalue>、but was:<actualvalue>」の代わりに、「Expected:<actualvalue>、but was:<expectedvalue>」を取得します。

つまり、それは大したことではありませんが、来てください^^他のすべての方法でそのような素晴らしい仕事をしている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

私はJavaとPHPの両方にHamcrestを使用していますが、この問題はありません。物事を主張する古い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

すべてのJUnitassertXxxメソッドは、最初にexpectedValue、次にactualValueを持っています。パラメータを間違った順序で使用してメソッドを呼び出しているだけです。

試す

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

そして、あなたは大丈夫でしょう。

ただし、一般的には良いアドバイスです。APIを使用する前にドキュメントを読んでください;)

于 2012-01-11T14:58:36.023 に答える