ååãŸã§ã§ãSpring Bootã䜿ã£ãã¢ããªã±ãŒã·ã§ã³æ§ç¯ã«å¿ èŠãªäž»èŠæè¡ãç¶²çŸ ããŸãããããããã©ããªã«åªããã³ãŒãã§ãã**äžå ·åïŒãã°ïŒ**ã¯ã€ããã®ã§ãã
ããããã¯ãã¢ããªã±ãŒã·ã§ã³ã®å質ãšä¿¡é Œæ§ãä¿èšŒããããã®éèŠãªããã»ã¹ã§ãããã¹ãã«ã€ããŠåŠã³ãŸããä»åã¯ããã¹ãã®åºæ¬ãšãªãåäœãã¹ãïŒUnit TestïŒã«çŠç¹ãåœãŠãJavaã®æšæºçãªãã¹ããã¬ãŒã ã¯ãŒã¯ã§ããJUnit 5ã®åºæ¬çãªäœ¿ãæ¹ã解説ããŸãã
1. ãªãåäœãã¹ããå¿ èŠãªã®ãïŒ
åäœãã¹ããšã¯ãã¢ããªã±ãŒã·ã§ã³ãæ§æããæå°åäœã®éšåïŒã¯ã©ã¹ãã¡ãœãããªã©ïŒããåç¬ã§èšèšéãã«æ£ããåäœãããã確èªãããã¹ãã§ãã
- æ©æçºèŠ: éçºã®åææ®µéã§äžå ·åãèŠã€ãããããããä¿®æ£ã³ã¹ããæãå®ãæžã¿ãŸãã
- å®å šãªæ¹ä¿®: ãã¹ãã³ãŒããæŽåãããŠãããšãæ¢åã®æ©èœãå£ããŠããªããããã¹ãã§ç¢ºèªã§ãããããå®å¿ããŠã³ãŒãã®æ¹ä¿®ããªãã¡ã¯ã¿ãªã³ã°ãè¡ããŸãïŒååž°ãã¹ãïŒã
- 仿§ã®æç¢ºå: ãã¹ãã³ãŒãã¯ãããã®ã³ãŒããäœããã¹ããããšããå®è¡å¯èœãªä»æ§æžã®åœ¹å²ãæãããŸãã
2. Javaã®æšæºãã¹ããã¬ãŒã ã¯ãŒã¯ïŒJUnit 5
Spring Bootã§ã¯ãæšæºã§JUnit 5ïŒJupiterïŒãå°å ¥ãããŠãããããã«å©çšã§ããŸãã
2-1. åºæ¬çãªã¢ãããŒã·ã§ã³
JUnit 5ã䜿ã£ããã¹ãã¯ã©ã¹ã®åºæ¬çãªæ§é ãšã¢ãããŒã·ã§ã³ã§ãã
| ã¢ãããŒã·ã§ã³ | çšé |
| @Test | ãã¹ãã¡ãœããã§ããããšã瀺ããŸãããã®ã¡ãœããããã¹ãã©ã³ããŒã«ãã£ãŠå®è¡ãããŸãã |
| @BeforeEach | åãã¹ãã¡ãœãããå®è¡ãããçŽåã«å®è¡ãããŸãããã¹ãããŒã¿ã®åæåãªã©ã«äœ¿çšã |
| @AfterEach | åãã¹ãã¡ãœãããå®è¡ãããçŽåŸã«å®è¡ãããŸããåŸåŠçãªã©ã«äœ¿çšã |
| @DisplayName | ãã¹ãã¯ã©ã¹ããã¹ãã¡ãœããã«ãæ¥æ¬èªãªã©ã®åãããããååãä»ããããŸãã |
2-2. ãã¹ãã¯ã©ã¹ã®æ§æäŸ
Java
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*; // ã¢ãµãŒã·ã§ã³ã¡ãœãããå©çš
@DisplayName("èšç®ãµãŒãã¹ã¯ã©ã¹ã®ãã¹ã")
class CalculatorTest {
private Calculator calculator; // ãã¹ã察象ã®ã¯ã©ã¹
@BeforeEach
void setUp() {
// ãã¹ãåã«Calculatorã€ã³ã¹ã¿ã³ã¹ãåæå
calculator = new Calculator();
}
@AfterEach
void tearDown() {
// åãã¹ãåŸã®åŸåŠçïŒããã§ã¯äœãããªãïŒ
}
@Test
@DisplayName("2ã€ã®æ°å€ã®å ç®ãæ£ããè¡ãããããš")
void testAdd() {
// 1. å®è¡ïŒActual: å®éã®çµæïŒ
int result = calculator.add(1, 2);
// 2. æ€èšŒïŒExpected: æåŸ
ãããçµæïŒ
// å®éã®çµæãšæåŸ
ãããçµæãäžèŽããããæ€èšŒ
assertEquals(3, result, "1 + 2 㯠3 ã«ãªãã¯ãã§ã");
}
@Test
@DisplayName("ãŒãé€ç®ã§äŸå€ãçºçããããš")
void testDivideByZero() {
// ç¹å®ã®äŸå€ãã¹ããŒãããããšãæ€èšŒ
assertThrows(IllegalArgumentException.class, () -> {
calculator.divide(10, 0);
});
}
}
3. æ€èšŒïŒã¢ãµãŒã·ã§ã³ïŒïŒAssertionsã¯ã©ã¹
ãã¹ãã«ãããŠæãéèŠãªã®ããæ€èšŒïŒAssertionïŒã§ããJUnit 5ã§ã¯ãorg.junit.jupiter.api.Assertions ã¯ã©ã¹ã«çšæãããéçã¡ãœããã䜿ããŸãã
| ã¡ãœãã | çšé |
| assertEquals(expected, actual, message) | æåŸ å€ãšå®éã®çµæãçããããšãæ€èšŒ |
| assertTrue(condition) | æ¡ä»¶ã true ã§ããããšãæ€èšŒ |
| assertFalse(condition) | æ¡ä»¶ã false ã§ããããšãæ€èšŒ |
| assertNull(actual) | å€ã null ã§ããããšãæ€èšŒ |
| assertThrows(type, executable) | æå®ãããã³ãŒãå®è¡æã«ç¹å®ã®äŸå€ãã¹ããŒãããããšãæ€èšŒ |
4. åäœãã¹ãã®ååïŒäŸåé¢ä¿ã®æé€
åäœãã¹ãã®ç®çã¯ããã®éšåïŒã¯ã©ã¹ïŒåç¬ã®åäœãæ€èšŒããããšã§ãã
ãããã¹ã察象㮠Service ã¯ã©ã¹ã Repository ã¯ã©ã¹ã«äŸåããŠããå Žåããã¹ãäžã«DBã¢ã¯ã»ã¹ãçºçããŠããŸããŸããããã§ã¯ãDBã®ç¶æ ã«ãã£ãŠãã¹ãã倱æããå¯èœæ§ããããçŽç²ãªåäœãã¹ããšã¯èšããŸããã
åå: åäœãã¹ãã§ã¯ãå€éšãžã®äŸåé¢ä¿ïŒDBãå€éšAPIãDIã³ã³ããïŒããã¹ãŠæé€ããã¡ã¢ãªäžã ãã§å®çµãããã¹ãã§ãã
ãã®äŸåé¢ä¿ãæé€ããããã«ã**ã¢ãã¯ïŒMockïŒãšã¹ã¿ãïŒStubïŒ**ãšããæè¡ãå¿ èŠã«ãªããŸãã
â æ¬æ¥ã®ãŸãšã
- **åäœãã¹ãïŒUnit TestïŒ**ã¯ãæå°åäœïŒã¯ã©ã¹ãã¡ãœããïŒã®ã³ãŒãã®åäœãæ€èšŒããæ©æã«äžå ·åãçºèŠããŠæ¹ä¿®ã®å®å šæ§ãé«ããã
- Spring Bootã§ã¯ãæšæºã§JUnit 5ã䜿çšããã
@Testã§ãã¹ãã¡ãœãããå®çŸ©ããAssertionsã¯ã©ã¹ã®ã¡ãœããïŒassertEqualsãassertThrowsãªã©ïŒã§æ€èšŒãè¡ãã- çŽç²ãªåäœãã¹ãã®ããã«ã¯ããã¹ã察象ã®ã¯ã©ã¹ããå€éšãžã®äŸåé¢ä¿ïŒDBãå€éšAPIãªã©ïŒãæé€ããå¿ èŠãããã
ð æ¬¡åäºå
åäœãã¹ãã®ååãšããŠåŠãã ãäŸåé¢ä¿ã®æé€ããå®çŸããããã«ã¯ãã©ãããã°è¯ãã§ããããã
次åã¯ããã¹ãæã«äŸåé¢ä¿ãåœç©ã«çœ®ãæããããã®åŒ·åãªæè¡ãã¢ãã¯ïŒMockïŒãšã¹ã¿ãïŒStubïŒããããŠãã®å®è£ ã«äžå¯æ¬ ãªã©ã€ãã©ãª Mockito ã®äœ¿ãæ¹ãåŠã³ãŸãã
次åïŒã第39åãäŸåãæã¡åãïŒãã¢ãã¯ãšMockitoã«ããåäœãã¹ãã ã«ãæåŸ ãã ããïŒ


ã³ã¡ã³ã