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ïŒïŒ;
}
}
ãã©ãŒã¯ãããããšããŠãŸãšããã®ã¯ç°¡åã§ãããã å¿ èŠã«å¿ããŠåãã§ãããŸãã
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/
æãåèã«ãªãã³ã¡ã³ã
comparesEqualTo
ã䜿ã£ãŠã¿ãŸãããïŒ