코드를 어떻게 작성하는게 좋을까요?
코드에서 Racing이 컨트롤러 역할을 하고 있는데, 이런 컨트롤러 역할을 하는 메서드들은 테스트 찾아 봤을 때는 '어떤 메서드가 실행되었는지 여부'를 확인해주는 라이브러리가 있는데 이것을 이용해서 다른 메서드를 정상적으로 호출했는지만 테스트 해주면 되는 것일까요?
결론부터 말하자면 컨트롤러에서 테스트하고 싶은 부분이 있으면 해당 부분을 도메인 레벨로 내려서 테스트해보는 걸 도전해보시는 걸 권장합니다. 나중에 외부 라이브러리에 의존하게 되고, 테스트하기 불가능하거나 어려운 부분이 있다면 행위 검증이라도 해야겠지만 레벨1 미션을 하는동안에는 아마도 필요가 없을 거 같네요.
상태검증은 메서드가 수행된 후 SUT나 협력객체의 상태를 살펴봄으로써 올바로 동작했는지를 판단하게 된다
SomeClass someClass = new SomeClass();
someClass.someMethod();
assertThat(someMethod.someStatus()).isEqualTo(true);
someStatus값이 true인지 상태 검사
SomeClass someClass = new SomeClass();
verify(someClass).someMethod();
someClass의 someMethod가 실행되었는지 행위 검사
stub
mock
행위검증의 경우 특정 메서드의 호출과 같은 것을 검증하기 때문에, 구현에 굉장히 의존적이게 된다. 이 말인 즉 프로덕션 코드가 변경되면 테스트코드가 변경될 확률이 높아진다는 것을 의미한다
상태검증의 경우 상태를 검증하기 위해 상태를 노출하는 메서드가 많이 추가될 수 있다
이러한 이유로 대체적이면 상태검증을 사용하는것이 좋다