Test-Driven Development is a software development approach where you write tests before writing the actual code. The TDD cycle follows these steps:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class StringCalculatorTest {
@Test
void add_EmptyString_ReturnsZero() {
StringCalculator calculator = new StringCalculator();
assertEquals(0, calculator.add(""));
}
}
public class StringCalculator {
public int add(String numbers) {
return 0;
}
}
@Test
void add_SingleNumber_ReturnsThatNumber() {
StringCalculator calculator = new StringCalculator();
assertEquals(1, calculator.add("1"));
}
@Test
void add_TwoNumbers_ReturnsSum() {
StringCalculator calculator = new StringCalculator();
assertEquals(3, calculator.add("1,2"));
}
public class StringCalculator {
public int add(String numbers) {
if (numbers.isEmpty()) {
return 0;
}
String[] nums = numbers.split(",");
int sum = 0;
for (String num : nums) {
sum += Integer.parseInt(num.trim());
}
return sum;
}
}
import org.mockito.Mock;
import org.mockito.Mockito;
import static org.mockito.Mockito.*;
public class OrderServiceTest {
@Mock
private PaymentGateway paymentGateway;
@Test
void processOrder_ValidPayment_ReturnsSuccess() {
when(paymentGateway.processPayment(anyDouble()))
.thenReturn(true);
OrderService service = new OrderService(paymentGateway);
assertTrue(service.processOrder(new Order(100.0)));
}
}
@DisplayName("User Registration")
class UserRegistrationTest {
@Test
@DisplayName("Should create new user with valid data")
void shouldCreateNewUserWithValidData() {
// Given
UserRegistration registration = new UserRegistration();
UserData userData = new UserData("john@example.com", "password123");
// When
User user = registration.register(userData);
// Then
assertNotNull(user);
assertEquals("john@example.com", user.getEmail());
}
}