Jest Example
// calculator.ts
export class Calculator {
add(a: number, b: number): number {
return a + b;
}
subtract(a: number, b: number): number {
return a - b;
}
multiply(a: number, b: number): number {
return a * b;
}
divide(a: number, b: number): number {
if (b === 0) {
throw new Error('Division by zero');
}
return a / b;
}
}
// calculator.test.ts
import { Calculator } from './calculator';
describe('Calculator', () => {
let calculator: Calculator;
beforeEach(() => {
calculator = new Calculator();
});
describe('add', () => {
it('should add two positive numbers', () => {
expect(calculator.add(2, 3)).toBe(5);
});
it('should handle negative numbers', () => {
expect(calculator.add(-2, 3)).toBe(1);
expect(calculator.add(2, -3)).toBe(-1);
expect(calculator.add(-2, -3)).toBe(-5);
});
});
describe('divide', () => {
it('should divide two numbers', () => {
expect(calculator.divide(6, 2)).toBe(3);
});
it('should throw error on division by zero', () => {
expect(() => calculator.divide(6, 0)).toThrow('Division by zero');
});
});
});
JUnit Example
// Java JUnit Test
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
public class UserServiceTest {
private UserService userService;
private UserRepository mockRepository;
@BeforeEach
void setUp() {
mockRepository = mock(UserRepository.class);
userService = new UserService(mockRepository);
}
@Test
void createUser_WithValidData_ShouldSucceed() {
// Arrange
User user = new User("John", "john@example.com");
when(mockRepository.save(any(User.class))).thenReturn(user);
// Act
User result = userService.createUser(user);
// Assert
assertNotNull(result);
assertEquals("John", result.getName());
assertEquals("john@example.com", result.getEmail());
verify(mockRepository).save(any(User.class));
}
@Test
void createUser_WithInvalidEmail_ShouldThrowException() {
// Arrange
User user = new User("John", "invalid-email");
// Act & Assert
assertThrows(ValidationException.class,
() -> userService.createUser(user));
}
}