JUnit is the most popular testing framework for Java.
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
public class CalculatorTest {
private Calculator calculator;
@BeforeEach
void setUp() {
calculator = new Calculator();
}
@Test
void testAddition() {
assertEquals(5, calculator.add(2, 3));
}
@Test
void testSubtraction() {
assertEquals(1, calculator.subtract(4, 3));
}
}
Unit tests focus on small, isolated pieces of functionality.
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class BankAccountTest {
@Test
void deposit_shouldIncreaseBalance() {
// Arrange
BankAccount account = new BankAccount(100);
// Act
account.deposit(50);
// Assert
assertEquals(150, account.getBalance());
}
@Test
void withdraw_withSufficientFunds_shouldDecreaseBalance() {
BankAccount account = new BankAccount(200);
account.withdraw(75);
assertEquals(125, account.getBalance());
}
}
Assertions verify that the actual result matches the expected result.
import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;
@Suite
@SelectClasses({
CalculatorTest.class,
BankAccountTest.class,
UserServiceTest.class
})
public class AllTestsSuite {
// This class remains empty
}
// Assertion examples
@Test
void testVariousAssertions() {
assertEquals(4, 2 + 2);
assertTrue(5 > 3);
assertNull(null);
assertThrows(ArithmeticException.class, () -> {
int result = 10 / 0;
});
}
TDD is a software development approach where tests are written before the implementation.
// Step 1: RED - Write failing test
@Test
void fizzBuzz_returnsFizzForMultiplesOf3() {
assertEquals("Fizz", fizzBuzz(3));
assertEquals("Fizz", fizzBuzz(6));
}
// Step 2: GREEN - Minimal implementation
public String fizzBuzz(int number) {
if (number % 3 == 0) {
return "Fizz";
}
return String.valueOf(number);
}
// Step 3: Add test for multiples of 5
@Test
void fizzBuzz_returnsBuzzForMultiplesOf5() {
assertEquals("Buzz", fizzBuzz(5));
assertEquals("Buzz", fizzBuzz(10));
}
// Step 4: Update implementation
public String fizzBuzz(int number) {
if (number % 3 == 0) {
return "Fizz";
}
if (number % 5 == 0) {
return "Buzz";
}
return String.valueOf(number);
}
// Step 5: Add test for multiples of both 3 and 5
@Test
void fizzBuzz_returnsFizzBuzzForMultiplesOf3And5() {
assertEquals("FizzBuzz", fizzBuzz(15));
assertEquals("FizzBuzz", fizzBuzz(30));
}
// Step 6: Final implementation
public String fizzBuzz(int number) {
if (number % 15 == 0) {
return "FizzBuzz";
}
if (number % 3 == 0) {
return "Fizz";
}
if (number % 5 == 0) {
return "Buzz";
}
return String.valueOf(number);
}