@@ -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
8585class 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