@Test
void testBoundary() {
assertFalse(isInRange(1));
}
@Test
void testBoundary() {
assertTrue(isInRange(2));
}
@Test
void testBoundary() {
assertFalse(isInRange(99));
}
@Test
void testBoundary() {
assertTrue(isInRange(100));
}
@ParameterizedTest
@ValueSource(ints = {1, 2, 99, 100})
void testBoundaries(int input) {
boolean expected = input % 2 == 0;
assertEquals(expected, isInRange(input));
}
비즈니스 요구 사항이 변경되었을 때, 테스트 코드가 작동되지 않을 확률을 낮춤
@Test
@DisplayName("구매금액의 10퍼센트 적립")
void testCalculateReward() {
// Given
int Amount = 10000;
// When
int points = pointService.calculateReward(Amount);
// Then
assertEquals(100, points);
}
@Test
@DisplayName("기존 포인트와 적립율로 계산하여 새로운 포인트가 일치하는지 테스트")
void testCalculateReward() {
// Given
int Amount = 1000;
int exisitingPoints = pointService.getPoint();
// When
int newPoints = pointService.calculateReward(Amount);
// Then
int expectedPoints = existingPoints + (int)(Amount * Rate);
assertEquals(expectedPoints, actualTotalPoints, "적립된 포인트가 예상과 일치해야 합니다.");
}
@Test
void testPurchaseProduct() {
// Given
Product product = new Product("TestProduct", 10);
User buyer = new User();
// When
boolean result = buyer.purchase("TestProduct",5);
product.remove("TestProduct",5)
// Then
assertEquals(5, product.getStock()); // 재고가 감소했는지 확인
assertEquals(true, result); // 구매가 성공했는지 검증
}
한가지 로직에서