Skip to content

Commit c02335e

Browse files
committed
test(ranking): 점수 계산 로직 및 단위 테스트 수정
- 점수 계산 방식 변경에 따른 테스트 값 업데이트 - 기존 테스트에서 사용된 점수 값 수정
1 parent 2be7a2f commit c02335e

4 files changed

Lines changed: 15 additions & 29 deletions

File tree

apps/commerce-batch/src/main/java/com/loopers/batch/job/ranking/support/ScoreCalculator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public long calculate(long viewCount, long likeCount, long salesCount, long orde
3737

3838
// 3. 최종 점수 계산 (소수점 처리를 위해 적절한 스케일 곱산 후 long 변환)
3939
// Redis ZSET의 score가 double임을 감안하여 정밀도를 유지합니다.
40-
return (long) ((viewScore + likeScore + normalizedSalesScore) * 1000);
40+
return (long) ((viewScore + likeScore + normalizedSalesScore) * 10);
4141
}
4242

4343
/**

apps/commerce-batch/src/test/java/com/loopers/batch/job/ranking/dto/RankingAggregationUnitTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ void should_create_from_valid_aggregation_result() {
3232
Assertions.assertThat(aggregation.getSalesCount()).isEqualTo(10L);
3333
Assertions.assertThat(aggregation.getOrderCount()).isEqualTo(5L);
3434
// score = 100*1 + 50*3 + 10*5 + 5*2 = 310
35-
Assertions.assertThat(aggregation.getTotalScore()).isEqualTo(310L);
35+
Assertions.assertThat(aggregation.getTotalScore()).isEqualTo(214L);
3636
Assertions.assertThat(aggregation.getRankPosition()).isEqualTo(0); // 초기값
3737
}
3838

@@ -166,7 +166,7 @@ void should_return_correct_string_format() {
166166

167167
// then
168168
Assertions.assertThat(result).contains("productId=1");
169-
Assertions.assertThat(result).contains("score=310");
169+
Assertions.assertThat(result).contains("score=214");
170170
Assertions.assertThat(result).contains("rank=1");
171171
}
172172
}

apps/commerce-batch/src/test/java/com/loopers/batch/job/ranking/support/RankingAggregatorUnitTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ class 랭킹_처리 {
2525
void should_sort_by_score_and_assign_ranks() {
2626
// given
2727
List<Object[]> results = List.of(
28-
new Object[]{1L, 100L, 10L, 5L, 2L}, // score = 100 + 30 + 25 + 4 = 159
29-
new Object[]{2L, 200L, 20L, 10L, 4L}, // score = 200 + 60 + 50 + 8 = 318
30-
new Object[]{3L, 50L, 5L, 2L, 1L} // score = 50 + 15 + 10 + 2 = 77
28+
new Object[]{1L, 100L, 10L, 5L, 2L},
29+
new Object[]{2L, 200L, 20L, 10L, 4L},
30+
new Object[]{3L, 50L, 5L, 2L, 1L}
3131
);
3232

3333
// when
@@ -39,15 +39,15 @@ void should_sort_by_score_and_assign_ranks() {
3939
// 점수 기준 내림차순 정렬 확인
4040
Assertions.assertThat(rankings.get(0).getProductId()).isEqualTo(2L); // 1위
4141
Assertions.assertThat(rankings.get(0).getRankPosition()).isEqualTo(1);
42-
Assertions.assertThat(rankings.get(0).getTotalScore()).isEqualTo(318L);
42+
Assertions.assertThat(rankings.get(0).getTotalScore()).isEqualTo(254L);
4343

4444
Assertions.assertThat(rankings.get(1).getProductId()).isEqualTo(1L); // 2위
4545
Assertions.assertThat(rankings.get(1).getRankPosition()).isEqualTo(2);
46-
Assertions.assertThat(rankings.get(1).getTotalScore()).isEqualTo(159L);
46+
Assertions.assertThat(rankings.get(1).getTotalScore()).isEqualTo(130L);
4747

4848
Assertions.assertThat(rankings.get(2).getProductId()).isEqualTo(3L); // 3위
4949
Assertions.assertThat(rankings.get(2).getRankPosition()).isEqualTo(3);
50-
Assertions.assertThat(rankings.get(2).getTotalScore()).isEqualTo(77L);
50+
Assertions.assertThat(rankings.get(2).getTotalScore()).isEqualTo(66L);
5151
}
5252

5353
@Test

apps/commerce-batch/src/test/java/com/loopers/batch/job/ranking/support/ScoreCalculatorUnitTest.java

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ void should_calculate_score_with_correct_weights() {
2424
long score = calculator.calculate(viewCount, likeCount, salesCount, orderCount);
2525

2626
// then
27-
// score = 100*1 + 50*3 + 10*5 + 5*2 = 100 + 150 + 50 + 10 = 310
28-
Assertions.assertThat(score).isEqualTo(310L);
27+
Assertions.assertThat(score).isEqualTo(214L);
2928
}
3029

3130
@Test
@@ -50,18 +49,6 @@ void should_have_highest_weight_for_sales_count() {
5049
// when & then
5150
Assertions.assertThat(singleSale).isGreaterThan(singleView);
5251
Assertions.assertThat(singleSale).isGreaterThan(singleLike);
53-
Assertions.assertThat(singleSale).isGreaterThan(singleOrder);
54-
}
55-
56-
@Test
57-
@DisplayName("좋아요가 조회수보다 높은 가중치를 가진다")
58-
void should_have_higher_weight_for_like_than_view() {
59-
// given
60-
long singleLike = calculator.calculate(0, 1, 0, 0);
61-
long singleView = calculator.calculate(1, 0, 0, 0);
62-
63-
// when & then
64-
Assertions.assertThat(singleLike).isGreaterThan(singleView);
6552
}
6653

6754
@Test
@@ -77,7 +64,7 @@ void should_calculate_correctly_with_large_numbers() {
7764
long score = calculator.calculate(viewCount, likeCount, salesCount, orderCount);
7865

7966
// then
80-
long expected = 1_000_000L * 1 + 500_000L * 3 + 100_000L * 5 + 50_000L * 2;
67+
long expected = (long) (((1_000_000L * 0.1) + (500_000L * 0.2) + Math.log1p(100_000L) *0.6 ) * 10);
8168
Assertions.assertThat(score).isEqualTo(expected);
8269
}
8370
}
@@ -93,10 +80,9 @@ void should_return_weight_info_in_correct_format() {
9380
String weightInfo = calculator.getWeightInfo();
9481

9582
// then
96-
Assertions.assertThat(weightInfo).contains("VIEW=1");
97-
Assertions.assertThat(weightInfo).contains("LIKE=3");
98-
Assertions.assertThat(weightInfo).contains("SALES=5");
99-
Assertions.assertThat(weightInfo).contains("ORDER=2");
83+
Assertions.assertThat(weightInfo).contains("VIEW=0.1");
84+
Assertions.assertThat(weightInfo).contains("LIKE=0.2");
85+
Assertions.assertThat(weightInfo).contains("SALES=0.6");
10086
}
10187
}
102-
}
88+
}

0 commit comments

Comments
 (0)