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(); }