Skip to content

Commit 23ee1e4

Browse files
committed
fix: correct function and class names for MortgageAssessor implementation and tests
1 parent 99f67f5 commit 23ee1e4

File tree

2 files changed

+18
-18
lines changed

2 files changed

+18
-18
lines changed

chapter11/11_1_기능뿐만_아니라_동작을_시험하라.mdx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@ author: 'hyunwok'
55

66
### 11.1.1 함수당 하나의 테스트 케이스만 있으면 적절하지 않을 때가 많다
77
- 주택 담보 대출을 자동으로 평가하는 시스템의 많은 사항들
8-
- access 함수는 주택담보대출을 받을 자격이 있는지 여부를 판단
8+
- assess 함수는 주택담보대출을 받을 자격이 있는지 여부를 판단
99
- 신용등급이 좋다.
1010
- 기존 주택담보대출이 없다.
1111
- 은행에 의해 금지된 고객이 아니다.
1212
- 헬퍼 함수를 사용해 자격이 있는 고객에 대한 최대 대출 금액을 결정하는데, 이 값은 연간 소득에서 연간 지출액을 뺀 값에 10을 곱한 값으로 계산된다.
1313

1414
```java
15-
class MortgageAccessor {
15+
class MortgageAssessor {
1616
private const Double MORTGAGE_MULTIPLIER = 10.0;
1717

18-
MortgageDecision access(Customer customer) {
18+
MortgageDecision assess(Customer customer) {
1919
if (!isEligibleForMortgage(customer)) {
2020
return MortgageDecision.rejected();
2121
}
@@ -38,17 +38,17 @@ class MortgageAccessor {
3838

3939
- 주택담보대출 평가 테스트 코드
4040
```java incorrect
41-
testAccess() {
41+
testAssess() {
4242
Customer customer = new Customer(
4343
income: new MonetaryAmount(50000, Currency.USD),
4444
outgoings: new MonetaryAmount(20000, Currency.USD),
4545
hasGoodCreditRating: true,
4646
hasExistingMortgage: false,
4747
isBanned: false
4848
);
49-
MortgageAccessor mortgageAccessor = new MortgageAccessor();
49+
MortgageAssessor mortgageAssessor = new MortgageAssessor();
5050

51-
MortgageDecision decision = mortgageAccessor.access(customer);
51+
MortgageDecision decision = mortgageAssessor.assess(customer);
5252

5353
assertThat(decision.isApproved()).isTrue();
5454
assertThat(decision.getMaxLoanAmount()).isEqualTo(

chapter11/11_2_테스트만을_위해_퍼블릭으로_만들지_말라.mdx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ author: 'bayernmuller'
66
### 11.2.1 private 함수를 테스트하는 것은 바람직하지 않을 때가 많다
77

88
```java
9-
class MortgageAccessor {
10-
MortgageDecision access(Customer customer) { ... } // public API
9+
class MortgageAssessor {
10+
MortgageDecision assess(Customer customer) { ... } // public API
1111

1212
private static Boolean isEligibleForMortgage(Customer customer) { // private helper
1313
...
@@ -19,10 +19,10 @@ class MortgageAccessor {
1919
}
2020
```
2121

22-
*`MortgageAccessor` 클래스의 목적은 신용 등급이 나쁜 경우 대출 신청을 거부하기 위함이다.
22+
*`MortgageAssessor` 클래스의 목적은 신용 등급이 나쁜 경우 대출 신청을 거부하기 위함이다.
2323

2424
```java incorrect
25-
class MortgageAccessor {
25+
class MortgageAssessor {
2626
...
2727
static Boolean isEligibleForMortgage(Customer customer) {
2828
// private helper, but public now for testing
@@ -44,22 +44,22 @@ testIsEligibleForMortgage() {
4444
isBanned: false
4545
);
4646

47-
assertThat(MortgageAccessor.isEligibleForMortgage(customer)).isFalse();
47+
assertThat(MortgageAssessor.isEligibleForMortgage(customer)).isFalse();
4848
}
4949
```
5050

5151
* 만약 위처럼 테스트 만을 위해 private 함수를 public 으로 만들었을 때 몇가지 문제가 있다.
5252
1. 실제로 우리가 신경쓰는 행동을 테스트 하는 것이 아니다.
5353
* 담보 대출 승인 여부를 판단하는 것이 목적이지, 고객 신용 평가 로직 자체를 테스트하는 것이 목적이 아니다.
54-
2. 즉 내부 로직을 테스트 하므로써 원래 우리가 테스트로 보장해야하는 `access()` 함수의 동작을 보장하지 못한다.
54+
2. 즉 내부 로직을 테스트 하므로써 원래 우리가 테스트로 보장해야하는 `assess()` 함수의 동작을 보장하지 못한다.
5555
3. 테스트는 세부 구현 사항에 독립적이지 못하게 된다.
5656
* 리팩토링 이후 테스트가 실패하게 될 것이다.
5757
4. private 키워드를 삭제하므로써 코드 계약의 세부 조항을 만들어버렸다.
5858

5959
### 11.2.2 해결책: public API 를 통해 테스트하라
6060

6161
```java correct
62-
testAccess_badCreditRating_mortgageRejected() {
62+
testAssess_badCreditRating_mortgageRejected() {
6363
Customer customer = new Customer(
6464
income: new MonetaryAmount(50000, Currency.USD),
6565
outgoings: new MonetaryAmount(25000, Currency.USD),
@@ -68,8 +68,8 @@ testAccess_badCreditRating_mortgageRejected() {
6868
isBanned: false
6969
);
7070

71-
MortgageAccessor mortgageAccessor = new MortgageAccessor();
72-
MortgageDecision decision = mortgageAccessor.access(customer);
71+
MortgageAssessor mortgageAssessor = new MortgageAssessor();
72+
MortgageDecision decision = mortgageAssessor.assess(customer);
7373
assertThat(decision.isApproved()).isFalse();
7474
}
7575
```
@@ -79,7 +79,7 @@ testAccess_badCreditRating_mortgageRejected() {
7979

8080
### 11.2.3 해결책: 코드를 더 작은 단위로 분할하라
8181

82-
* `MortgageAccessor` 클래스를 `MortgageAccessor``CreditRatingChecker` 로 분할하고, `MortgageAccessor``CreditRatingChecker` 에 의존하게 코드를 작성할 수 있다.
82+
* `MortgageAssessor` 클래스를 `MortgageAssessor``CreditRatingChecker` 로 분할하고, `MortgageAssessor``CreditRatingChecker` 에 의존하게 코드를 작성할 수 있다.
8383

8484
```java correct
8585
class CreditRatingChecker {
@@ -89,11 +89,11 @@ class CreditRatingChecker {
8989
}
9090
}
9191

92-
class MortgageAccessor {
92+
class MortgageAssessor {
9393
...
9494
private CreditRatingChecker creditRatingChecker;
9595

96-
MortgageDecision access(Customer customer) {
96+
MortgageDecision assess(Customer customer) {
9797
...
9898
}
9999

0 commit comments

Comments
 (0)