사랑해 마니마니

Business Logic Layer 추가하기 본문

spring boot in action

Business Logic Layer 추가하기

분리불안증후군 2018. 5. 1. 18:54

Multiplication Service에 1)method 하나 추가하고 2)테스트 만들기

    boolean checkAttempt(final MultiplicationResultAttempt resultAttempt);

TDD에서와 같이 interface 구현 함수에 대충 만들어서 test fail 만들기 이후에 다시 정련하기^^;

//MultiplicationServiceImpl.java
    @Override
    public boolean checkAttempt(MultiplicationResultAttempt resultAttempt) {
        return false;
    }

이제 기존 테스트 클래스에 새로 추가한 메소드를 테스트 해보자

    @Test
    public void checkCorrectAttemptTest() {

    }

    @Test
    public void checkWrongAttemptTest() {

    }

하나는 성공 케이스, 또하나는 실패 케이스...

이제 세부 구현해 보자

public class MultiplicationServiceTest {
    private MultiplicationServiceImpl multiplicationServiceImpl;


    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        multiplicationService = new MultiplicationServiceImpl(randomGeneratorService);

        multiplicationServiceImpl = new MultiplicationServiceImpl(randomGeneratorService);
    }

    @Test
    public void checkCorrectAttemptTest() {
        // given
        Multiplication multiplication = new Multiplication(50, 60);
        User user = new User("john_doe");
        MultiplicationResultAttempt attempt = new MultiplicationResultAttempt(user, multiplication, 3000);
        // when
        boolean attemptResult = multiplicationServiceImpl.checkAttempt(attempt);
        // assert
        assertThat(attemptResult).isTrue();

    }
    }

실행 시키면 당연히 fail: 왜냐하면 public boolean checkAttempt(MultiplicationResultAttempt resultAttempt) { return false; } 코드 때문에....

<pre class="brush: java">
    @Test
public void checkWrongAttemptTest() {
    // given
    Multiplication multiplication = new Multiplication(50, 60);
    User user = new User("john_doe");
    MultiplicationResultAttempt attempt = new MultiplicationResultAttempt(user, multiplication, 3010);
    // when
    boolean attemptResult = multiplicationServiceImpl.checkAttempt(attempt);
    // assert
    assertThat(attemptResult).isFalse();
}
</pre>

이 코드는 당연히 성공 T.T --> 구현을 재대로 안했는 데도...
성공, 실패 케이스를 둘다 만들어서 테스트 안해보면..
가끔씩... 잘 못된 케이스에 대해서 Pass가 될 수 있으니 조심...!!!

TDD에서 처럼... 이제.. service impl class의 메소드를 재대라 만들어 보자.

    @Override
    public boolean checkAttempt(MultiplicationResultAttempt resultAttempt) {
        //return false;

        return resultAttempt.getResultAttempt() ==
                    resultAttempt.getMultiplication().getFactorA() *
                    resultAttempt.getMultiplication().getFactorB();

    }

'spring boot in action' 카테고리의 다른 글

macOS IntelliJ 단축키  (0) 2018.07.24
도메인 디자인 하기  (0) 2018.05.01
스프링 부트 마이크로서비스 - 도메인  (0) 2018.04.21
3Tier 로 고치기  (0) 2018.04.21
Microservice @spring boot  (0) 2018.04.21
Comments