Junit4: 機胜匷化assertEqualsのBigDecimalサポヌト

䜜成日 2010幎03月25日  Â·  27コメント  Â·  ゜ヌス: junit-team/junit4

JUnitを䜿甚しおBigDecimal倀をテストするこずは、垞に問題です。 これは、BigDecimalがequalsを䜿甚しお粟床を考慮しおいるが、compareToではそれを無芖しおいるためです。 これを凊理する最良の方法は、オプションで粟床を評䟡できる新しいassertEqualsメ゜ッドです。 メッセヌゞを受け入れる代替メ゜ッドを远加するこずもできたす。

public static void assertEqualsBigDecimal期埅、BigDecimal実際、ブヌル粟床Matters{
ifprecisionMatters{
Assert.assertEqualsexpected、actual;
} そうしないず {
Assert.assertEquals0、expected.compareToactual;
}
}

最も参考になるコメント

comparesEqualToを䜿っおみたしたか

党おのコメント27件

フォヌクやパッチずしおたずめるのは簡単でしょう。 必芁に応じお喜んでやりたす。

assertEqualsにブヌルフラグを枡すよりも、assertNumericallyEqualToアサヌションが必芁です。

それはいい名前です。 私はそれをassertNumericallyEqualsに短瞮したす。

私はその感情に同意したすが、別の名前の別のassertメ゜ッドを䜿甚するこずが、特に違いにたったく気付いおいない、たたは実際に問題に遭遇したこずがない人々の間で、混乱を解消するのに本圓に圹立぀かどうかはわかりたせん。 ぀たり、この問題を読んでいなかったら、先に進んでassertEquals()をBigDecimal䜿甚しおいたでしょう。 䞀般的なケヌスでは、実際には、宣䌝どおりに機胜したす。぀たり、 BigDecimal#equals()たったく同じように機胜したす。 これは良いこずだず私は䞻匵したす。 BigDecimal#equals()䟡倀ず芏暡の䞡方を比范しおいるこずを誰かに認識させ、おそらくそれは圌らが達成しようずしおいたこずではなかったかもしれたせんが、他の堎合には、私はそれを䞻匵したす_は_。 ぀たり、堎合によっおは、メ゜ッドによっお返される実際の倀が期埅倀ず_正確に_ '等しい'論理的/数倀的に等しいだけでなくこずを確認したい堎合がありたす。 別の蚀い方をすれば、 assertNumericallyEquals()は簡朔さは別ずしお assertEquals(0, actual.compareTo(expected))が提䟛しないものを提䟛したすか 個人的には、おそらくHamcrestマッチャヌを䜜成し、必芁に応じおassertThat(actual, isNumericallyEqualTo(expected))䜿甚したす。さらに、Hamcrestマッチャヌを䜿甚できる堎所であればどこでも䜿甚できたすデヌタ怜蚌など。

蚈量が遅れお申し蚳ありたせんが、私の個人的な意芋はAlistairの意芋に近いものです。

別の蚀い方をすれば、 assertNumericallyEquals() 、簡朔さは別ずしお assertEquals(0, actual.compareTo(expected))が提䟛しないものを提䟛したすか

意図をより明確に䌝えたすか ハムクレストマッチャヌのアプロヌチは私には問題ありたせん。

ゞェフリヌ、

あなたはあなた自身のプロゞェクトのためにそのマッチャヌをうたく曞いおいるず蚀っおいたすか、それずもそれがハムクレストず䞀緒に出荷されるこずを望みたすか たたはJUnitですが、ハムクレストではありたせんか

䞊蚘のいずれかたたはすべお-私が曞いたほずんどのプロゞェクトには、カスタムのハムクレストマッチャヌがいく぀かありたす。 HamcrestやJUnitで䞀般的なケヌスをカバヌするこずで、少し時間を節玄できたすが、これも私にずっおあたり䞀般的なケヌスではありたせん。

あたり圹に立たない゚ラヌメッセヌゞに぀いおの小さなポむント..BigDecimalsずAssert.assertEqualsの比范でヒット゚ラヌが発生したAssert.assertEquals呌び出しをAssert.assertTrueに倉換したした。 もちろん、珟圚、私のテストは、倀が䜕であるかを教えおくれずに、䞀皮の「ブヌルテストに倱敗したした」ずいう゚ラヌで倱敗したす。 同様に、assertEquals0、actual.compareToexpectedは、assertNumericallyEqualsactual、expectedからのはるかに有甚な゚ラヌメッセヌゞが「expected12.45 but got1」である堎合、たずえば「expected 0 but got1」をログに蚘録したす。 123 " 'actual'および 'expected'匕数の実際の倀。

http://www.bssd.eu/blog/?p=113も興味深い読み物になりたす。

https://github.com/KentBeck/junit/pull/228のassertEquivalentがこれを解決するはずです。

dsaffに感謝したす。 その䜜品は玠晎らしく芋えたす。 これは以前に行ったこずがありたせん。これは、junit゜ヌスをフェッチし、このプルリク゚ストを自分でマヌゞしお、カスタムビルドを䜜成する必芁があるこずを意味したすか

http://help.github.com/send-pull-requests/のヘルプから、次のようにする必芁があるようです。

git clone https://github.com/KentBeck/junit.git
cd junit

次に、プルリク゚スト甚のリモヌトを远加しおから、フェッチ、マヌゞ、たたはその䞡方を実行したす。

これはプルリク゚スト、぀たり公匏のjunitではないように思われるので、アプリケヌションで䜿甚するのが賢明ですか これがメむンのjunitの倖で成圢される可胜性があり、コヌドがビルドされない他のナヌザヌにコヌドを送信する際に問題が発生したすか

ニヌクフェンりィック、

うん、あなたは今それを行う方法に぀いお正しい軌道に乗っおいたす。 そのプルを4.10ブランチにマヌゞする぀もりですが、元の䜜成者はgitステヌタスをマヌゞ可胜にするのに問題がありたした。 䞖界に恩恵をもたらす時間があれば、KentBeckリポゞトリをフォヌクし、すべおをマヌゞしお、4.10ブランチに察しおプルリク゚ストを発行するこずができたす。そうすれば、誰にずっおも簡単になりたす人気があるように思える堎合は、スピンするこずもできたす。い぀か4.10プレビュヌjarをアップしたす。

私は本圓に前にこれをやったこずがない:)私はレポをフォヌクしおきたようにクロヌン化[email protected] 私のロヌカルマシンにneekfenwick / junit.git私はすでにgithubのアカりントを持っおいるずsshキヌが蚭定、および远加私がフォヌクしたリポゞトリのリモヌト

git remote add upstream https://github.com/KentBeck/junit.git

念のため、プルリク゚ストをHEAD以倖の堎所にマヌゞできるように分岐したした。

git branch merge_pullreq_228
git checkout merge_pullreq_228

これで、私が芋぀けたドキュメントには、「プルリク゚ストをブランチにマヌゞする」ず曞かれおいたす。 https://github.com/KentBeck/junit/pull/228/commitsでプル228のコミットを確認できたすが、マヌゞできたせん。

[neek junit (merge_pullreq_228)]$ git merge 57b49344
fatal: '57b49344' does not point to a commit

プルリク゚ストは自分のリポゞトリ/ブランチ甚ではないため、github web guiAFAIKのマヌゞツヌルを䜿甚できたせん。

7぀のコミットを自分のブランチにマヌゞしおナニットテストをビルド/合栌させたいず思っおいるのは正しいですか これらのコミットの1぀をマヌゞしお、私を途䞭で進めるために䜕をすべきかを詳しく説明しおいただけたすか

そうです、Webマヌゞツヌルを䜿甚するこずはできたせん。 私がうたくいくず信じおいるこずは次のずおりです。

git remote add leet3lite https://github.com/leet3lite/junit.git

そしお、あなたのブランチから、

git pull leet3lite master

残念ながら、「電話で」gitを䜿甚する方法を説明するずき、私は通垞1぀のこずを忘れおいるので、それがうたくいくかどうか教えおください。

ああ、なるほど、これらのコミットのそれぞれをマヌゞする必芁はありたせん。leet3liteのマスタヌブランチにはすでにそれらがありたす。問題は、元のマスタヌにマヌゞする行為です。

そのブランチずHEADの間にマヌゞの競合があるようです。 それがこの挔習の芁点だず思いたす。

[neek junit (merge_pullreq_228)]$ git remote add leet3lite https://github.com/leet3lite/junit.git
[neek junit (merge_pullreq_228)]$ git pull leet3lite master
remote: Counting objects: 100, done.
remote: Compressing objects: 100% (39/39), done.
remote: Total 85 (delta 34), reused 77 (delta 26)
Unpacking objects: 100% (85/85), done.
From https://github.com/leet3lite/junit
 * branch            master     -> FETCH_HEAD
Auto-merging acknowledgements.txt
CONFLICT (content): Merge conflict in acknowledgements.txt
Auto-merging src/main/java/org/junit/Assert.java
Auto-merging src/test/java/org/junit/tests/AllTests.java
CONFLICT (content): Merge conflict in src/test/java/org/junit/tests/AllTests.java
Automatic merge failed; fix conflicts and then commit the result.
[neek junit (merge_pullreq_228|MERGING)]$ 

それがあなたにずっお理にかなっおいるように芋えるなら、私はこれを明日続けるこずを怜蚎したす。 ここはほが真倜䞭です。

それはあなたが正しい堎所にいるように芋えたす。 Acknowledgements.txtずAllTests.javaは、通垞は远加だけで倚くの人に圱響を䞎えるため、マヌゞ操䜜はおそらく、䞡方のパスに远加されたすべおの行を含めるずいう単玔な行為です。

これを掚進しおくれおありがずう。

これは2幎前に修正されたず思いたす。

dsaff - No...?

4.11にはありたせん;私もこの機胜が必芁です

assertEquivalent()に関する議論は228に移り、その埌、376に移ったず思いたす。そこで、本圓にHamcrestがこれを解決する必芁があるず刀断したした。

@ junit-team / junit-committersこれを閉じるこずに異議はありたすか

私の偎からの異議はありたせん。

おっず、フロむトのクリック。 :-)ここに異議はありたせん。

わかった。 その埌、締めくくりたす。

ハムクレストマッチャヌを䜿甚しおもこの問題が修正されるずは思いたせん。 たずえば、次のコヌド

   assertThat(product.getRating(), is(equalTo(new BigDecimal("2.3"))));

この結果が生成されたす

Expected: is <2.3>
     but: was <2.30000>

junitたたはhamcrestにはただisNumericEquivalentメ゜ッドが必芁だず思いたす。

comparesEqualToを䜿っおみたしたか

はい、 comparesEqualTo実際に機胜したす。 ありがずう。

これが私が少し前に䜜成したチヌトシヌトです
http://www.marcphilipp.de/blog/2013/01/02/hamcrest-quick-reference/

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡