assertEqualsããã ããJUnitãããªãã£ãïŒæ©èœã®ç޹ä»
ãŠããããã¹ãã£ãŠè¯ãã§ãããïŒãã°ã¬ãŒãïŒãªã°ã¬ãã·ã§ã³ïŒã«æ°ä»ãããããã¹ãã³ãŒããã仿§ãèªã¿åããããèšèšãæ¹åãããŸããããªãã¡ã¯ã¿ãªã³ã°ã«äœ¿ãããã»ã»ã»è²ã è¯ãæãã§ãã
仿¥ã¯ãŠããããã¹ãã®ããŒã«ãJUnitã®è©±é¡ã§ãã
Javaããã°ã©ãã«ã¯å¿ é ã®ã©ã€ãã©ãªã»ãã¬ãŒã ã¯ãŒã¯ã®ïŒã€ã§ããJUnitã§ãããæ¥ããããããšã«ãç§ã®ç¿ç床ã¯äœãã§ããçç±ã¯ãéå»ã«ããçšåºŠäœ¿ããããã«ãªã£ãæç¹ã§åŠç¿ãèŸããŠããŸã£ãããšãšãä»äºã§ã¯è²ã ãªåé¡ã®ããã§äœ¿ãæ©äŒãå°ãªãããšãã®ïŒç¹ã§ãã
ä»åã以äžã®ãªããªãè¯ãããªæ¬ã®ååšãç¥ã£ãã®ã§ã¡ãããšåŠç¿ããŠã¿ãããšã«ããŸããã
[tmkm-amazon]477415377X[/tmkm-amazon]
䜿ããããªè¯ããšæã£ãæ©èœã»ãã¯ããã¯
assertThat
èªåãåããŠJUnitã«è§Šãããšãã¯ãããªæ©èœãããŸããã§ããããã®ãããJUnitãšèšãã°assertEqualsãšããèªèã ã£ããã§ããããã£ã¡ã®assertThatã¡ãœããã®æ¹ãæç¶è¯ãã§ããïŒããããã¯ãã¡ãã䜿ããŸãïŒ
assertThatã¯Matcherãšãããªããžã§ã¯ããå©çšããŠãããã³ã°ãè¡ãç¹ãassertEqualsãšå€§ããç°ãªããŸããã©ã®ããã«éããã¯ä»¥äžã®éãã§ãã
äŸãã°ãã®ãããªãã¹ãã±ãŒã¹ããããšããŸãã
package com.tsukaby.sample;
import java.util.Date;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@RunWith(JUnit4.class)
public class HogeTest {
@Test
public void test_ååŸããæ¥ä»ãæ£ããã() {
// å®éã¯ãã¹ã察象ã¯ã©ã¹ã®ã¡ãœããããååŸãã
// 2014/1/1 00:00:00
Date actual = new Date(114, 0, 1);
// 2014/1/1 00:00:01
Date expected = new Date(114, 0, 1, 0, 0, 1);
assertEquals(expected, actual);
}
}
ïŒactualã®å€ã¯ãã¹ã察象ã®ã¡ãœããããåãåã£ãããšã«ããŠãã ãããããã§ã¯äŸã®ããçŽæ¥DateãnewããŠããŸãããïŒ
ãã®ãã¹ããå®è¡ãããšåœç¶ã¬ããããŒããã¹ã倱æã§ãããªããªã1ç§ãããŠããŸãã®ã§ã
Dateã®ãããªæ¥ä»åãæ±ããšããæ¥æªæºã®åäœãã€ãŸãæãåãç§ã¯äœã§ãè¯ããæããªãããšããã·ãŒã³ãå€ã ãããŸããäžèšã®ãã¹ãã§2014/1/1ãã©ãããæ€èšŒãããšããã³ãŒããæžãå Žåã©ããããããã®ã§ããããã
以äžã¯è§£ã®ïŒã€ã§ããã埮åŠã§ãã
assertEquals(expected.getYear(), actual.getYear());
assertEquals(expected.getMonth(), actual.getMonth());
assertEquals(expected.getDay(), actual.getDay());
ãã®ãããªã±ãŒã¹ã¯assertThatãå©çšãããšã¹ããŒãã«è§£æ±ºã§ããŸããassertThatã¯Matcherãšãããªããžã§ã¯ããå©çšããŠãããã³ã°ãè¡ããŸãããã®ããããã®Matcherãå©çšã·ãŒã³ã«åãããŠéžæããã°è¯ãããã§ãã
Matcherã¯ããã»ã©èŠåŽããããšãªãç¬èªã«äœæããããšãã§ããŸãããããã§ã¯ç¬èªã«äœæããããšã¯ããŸãããDateã¯æšæºAPIã§ããããã£ãšäžã®äžã®ã©ãããç¹ã«GitHubãªããã«Dateãæ€èšŒããMatcherãå ¬éããŠãã人ãããã¯ãã§ãã
ããã¯å®éå± ãŠã以äžã«ãŠå ¬éãããŠããŸãã
ããã£ã»ãïŒstewbisããããšãïŒMaven Centralã«ãç»é²ãããŠããïŒããã«BSDã©ã€ã»ã³ã¹ã§åãã¡ã¯ïŒæ¯èŒçïŒèªç±ã ïŒ
æ©éäžèšã®ãµã€ãéãpom.xmlã«äŸåã©ã€ãã©ãªã远å ããhamcrest-dateãå©çšããŸãã
package com.tsukaby.sample;
import java.util.Date;
import static org.hamcrest.MatcherAssert.assertThat;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import uk.co.it.modular.hamcrest.date.DateMatchers;
@RunWith(JUnit4.class)
public class HogeTest {
@Test
public void test_ååŸããæ¥ä»ãæ£ããã() {
// å®éã¯ãã¹ã察象ã¯ã©ã¹ã®ã¡ãœããããååŸãã
// 2014/1/1 00:00:00
Date actual = new Date(114, 0, 1);
// 2014/1/1 00:00:01
Date expected = new Date(114, 0, 1, 0, 0, 1);
assertThat(actual, DateMatchers.sameDay(expected));
}
}
ããã¯ã°ãªãŒã³ããŒã§æåããŸããsameDayã¯å¹Žãæãæ¥ãŸã§ãæ€èšŒããããã§ãã2014/1/1ãš2013/1/1ãšãã¯å¿è«å¹ŽåºŠãç°ãªãã®ã§ã¬ããã«ãªããŸãããäžèšã®ãããªç§ãç°ãªãã±ãŒã¹ã¯ã°ãªãŒã³ã«ãªããŸãã
assertThatãšMatcheréåžžã«äŸ¿å©ã§ãã
ãã¹ãã¡ãœããåã¯æ¥æ¬èªã§
ããã¯åã ããæã£ãŠãããšãªã®ã§ãããäžèšã®æ¬ãèªãã§èããåºãŸããŸããããã¹ãã¡ãœããã¯æ¥æ¬èªã§æžããŠãããã ã»ã»ã»ïŒ
æ¥åã§ã¯äŒç€Ÿããããžã§ã¯ãã®ç¹æ§äžããã¹ãã±ãŒã¹ãæžãããšã¯å°ãªããã§ãããããã§ãå°ãã¯ãããŸãããããªãšãããã¹ãåã¯ä»¥äžã®ããã«ä»ããŠããŸããã
@RunWith(JUnit4.class)
public class HogeTest {
//ã±ãŒã¹1ãçªå·
@Test
public void test001(){
}
//ã±ãŒã¹2ãæ£åžžç³»ãç°åžžç³»ã
@Test
public void testSuccess001(){
}
@Test
public void testFailure001(){
}
}
çç±ã¯ãã¹ãã±ãŒã¹ãèšè¿°ããExcel衚ãå¥ã«ããã®ã§ããããšå¯Ÿå¿ä»ããããã«çªå·ãå¿ èŠã ã£ãããå°ãã¯åãããããããããšSuccessãšãã¯ä»ããããã«ããããšããããªæãã§ãã
åææ¡ä»¶ããã¹ãã®æŠèŠã¯Javadocã³ã¡ã³ãã«é 匵ã£ãŠæžããŠããŸãããã»ã»ã»ãã£ãšåŸ®åŠãªæ°æã¡ã§ããããããŠããŸãããïŒæ¢ã«ä»ã®äººãäœã£ããµã³ãã«å®è£ ãç䌌ãå¿ èŠããã£ãŠç°¡åã«ã¯æ¹åã§ããªãç¶æ ã§ããïŒ
ãã¹ãã¡ãœããåã¯æ¥æ¬èªã§æžããŠãããã§ããïŒ
@RunWith(JUnit4.class)
public class HogeTest {
@Test
public void test_ââãšââãââããââã«ãªã(){
}
}
é ã®âtestâã¯æ £ç¿ãªã®ã§ãã®ãŸãŸæ®ããŠåŸãã«æ¥æ¬èªåãä»ããŠåãããããããŸããæ¥æ¬èªéšåã¯5W1HãšããèããŠããããžã§ã¯ãã§ããçšåºŠæ¹éãæ±ºããæ¹ãè¯ãæ°ãããŸãã
Enclosedãã¹ãã©ã³ããŒ
ãã¹ãã¯ã©ã¹ã®äžã«ã€ã³ããŒã¯ã©ã¹ãäœæããããšãããã®ã§ãã
package com.tsukaby.sample;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
@RunWith(Enclosed.class)
public class HogeTest {
public static class HogeTest_ååãªã¹ãã«å€ãååšããã±ãŒã¹ {
private List<String> names = new ArrayList<String>();
@Before
public void setUp() {
names.add("Taro");
names.add("Jiro");
names.add("Tom");
}
@Test
public void test_1() {
//namesã䜿ã£ãŠããã¡ãœããããã¹ã
}
@Test
public void test_2() {
//namesã䜿ã£ãŠããã¡ãœããããã¹ã
}
}
public static class HogeTest_ååãªã¹ãã«å€ãååšããªãã±ãŒã¹ {
List<String> names = new ArrayList<String>();
@Test
public void test_1() {
//namesã䜿ã£ãŠããã¡ãœããããã¹ã
}
@Test
public void test_2() {
//namesã䜿ã£ãŠããã¡ãœããããã¹ã
}
}
}
åææ¡ä»¶ããšã«æ§é åã§ãããããã®ã§è¯ãæãã§ããã
äžèšã§ã¯namesããã¹ã察象ã®ã¡ãœããã«äžããããšãæ³å®ããŠããã®ã§ãåãã¹ãã¡ãœããå ã§namesãæ§ç¯ããæ¹ãè¯ããããããŸããããDBã®åæåãè¡ãå Žåãªã©ã¯ç¢ºå®ã«ãåææ¡ä»¶ããšèšããã®ã§åœ¹ç«ã¡ããã§ãã
ãã©ã¡ãŒã¿åãã¹ã
ãã¹ãã±ãŒã¹ãæžããšãããã¹ã察象ã®ã¡ãœããã«äžãããã©ã¡ãŒã¿ãšãã®äºæž¬å€ãç°ãªãã ããªã®ã«ãåããããªãã¹ãã±ãŒã¹ã¡ãœãããäœåºŠãæžããªããšãããªãããšããããããŸãããããªãšãã¯ãã©ã¡ãŒã¿åãã¹ãïŒTheoriesãã¹ãã©ã³ããŒïŒãå©çšããŸãã
äŸãã°ä»¥äžã®ãããªã§ã
package com.tsukaby.sample;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import org.junit.experimental.theories.DataPoints;
import org.junit.experimental.theories.Theories;
import org.junit.experimental.theories.Theory;
import org.junit.runner.RunWith;
@RunWith(Theories.class)
public class HogeTest {
@DataPoints
public static Fixture[] fixtures = {
new Fixture(2, 3, 5),
new Fixture(3, 4, 7),
new Fixture(5, 10, 15)
};
@Theory
public void test_ãã©ã¡ãŒã¿åãã¹ã(Fixture fixture) {
int actual = Calculator.add(fixture.getX(), fixture.getY());
int expected = fixture.getResult();
assertThat(actual, is(expected));
}
private static class Fixture {
private int x;
private int y;
private int result;
public Fixture(int x, int y, int result) {
this.x = x;
this.y = y;
this.result = result;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getResult() {
return result;
}
public void setResult(int result) {
this.result = result;
}
}
}
ãããå®è¡ãããšãã¹ãã3åèµ°ããŸãããã3ã€ããFixtureã®ãã¡ã3ã€ç®ã§ãšã©ãŒãçºçããå Žåã
ãšã©ãŒçºç: test_ãã©ã¡ãŒã¿åãã¹ã(fixtures[2])ãšãããããªè¡šç€ºãåºãã®ã§ãã©ãã§ãšã©ãŒãåºããåãããŸãã
ä»ã«ãè²ã
äžèšã®æ¬ã§ã¯ä»ã«ãæ§ã ãªãã¯ããã¯ãå ¬éãããŠããŸããã
- Matcher APIã®notã§assertThat(actual, is(not(expected)));ãšæžãã è±æãªã®ã§èªç¶ãªåœ¢ã«ãªã
- Categoriesãã¹ãã©ã³ããŒã§ãã¹ããã«ããŽãªãŒåããŠäžéšã ãå®è¡ DBã®ãã¹ãã ãã¯åããŠãããŠãã¹ããŒãã¹ãåé¡è§£æ±º
- ã«ãŒã«
- ãã¹ãããã«ïŒã¢ãã¯ã®ã©ã€ãã©ãªã䜿ã£ãŠãã¹ã¿ããªãã£åäžïŒ
ãªã©ãªã©ã
éåžžã«å匷ã«ãªããŸãããJUnitã®ç¥èãããŒãžã§ã³3ã§æ¢ãŸã£ãŠãã人ããèªåãšåããassertEqualsã°ã£ãã䜿ã£ãŠãã人ã«ã¯ãå§ãã®ïŒåã§ãã
JUnit4ããã¹ã¿ãŒããŠé 匵ã£ãŠãŠããããã¹ããååãããŠããéçºãç®æããŸãã