テスト: JUnit 5

ユニットテストを書いてコードの品質を確保。

JUnit
Java の標準テストフレームワーク。
Assertions
期待値と実際を比較。
Mock
依存をダミーに置き換え。
Quality Inspector

テストは「品質検査官」です。 製品(コード)が出荷前に、不良品(バグ)がないかチェック。 検査なしで出荷すると、後でクレームの嵐。

JUnit

@Test, Assertions
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
class CalculatorTest {
private Calculator calc;
@BeforeEach
void setUp() {
calc = new Calculator();
}
@Test
@DisplayName("1 + 1 = 2")
void additionWorks() {
assertEquals(2, calc.add(1, 1));
}
@Test
void divisionByZeroThrows() {
assertThrows(ArithmeticException.class,
() -> calc.divide(1, 0));
}
@AfterEach
void tearDown() {
calc = null;
}
}
実行結果
Tests run: 2, Failures: 0, Errors: 0
Bad
// ❌ Bad: main で手動テスト
public static void main(String[] args) {
if (calc.add(1, 1) != 2) {
System.out.println("FAIL!");
}
}
Good
// ✅ Good: JUnit でテスト
@Test
void additionWorks() {
assertEquals(2, calc.add(1, 1));
}

パターン

Parameterized, Mockito
// パラメータ化テスト
@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void testMultipleInputs(int number) {
assertTrue(number > 0);
}
@ParameterizedTest
@CsvSource({"1, 1, 2", "2, 3, 5", "10, 20, 30"})
void testAddition(int a, int b, int expected) {
assertEquals(expected, calc.add(a, b));
}
// モック (Mockito)
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
@Mock
UserRepository repository;
@InjectMocks
UserService service;
@Test
void findUser() {
when(repository.findById(1L))
.thenReturn(Optional.of(new User("Alice")));
User user = service.findById(1L);
assertEquals("Alice", user.getName());
}
}
// 実行
// mvn test
// gradle test
Tip: テスト駆動開発 (TDD) を心がける。

合格ライン

@Test でテストを書ける
Mockito でモックを使える

参考リンク

演習課題

課題1: @Test
JUnit 5 でユニットテストを作成してください。
課題2: Mockito
Mockito でモックを作成してテストしてください。

次のステップ