TDD를 진행하면서 사전에 이론적으로 알아야할 부분들이 필요하다고 느꼈다. 그냥 무턱대고 하기엔 다소 이해하기 힘든 부분들이 많았다. 테스트 코드를 작성해보면서 이게 맞는지 계속 의문이 들었다. 기본적인 용어부터 시작해서 여러가지 가치관에 대해 알 필요가 생겼기 때문에 Test Double이라는
용어에 대해 알아보자
스턴드 더블(스턴트맨)에서 아이디어를 얻어서 만든 용어이며, 실제 객체로 테스트를 진행하기 어려운 경우 대신해서 진행할 수 있는 객체를 말한다.
Dummy
Stub
Fake
Spy
Mock
@Mock
private CreateUserUseCase createUserUseCase;
@Test
public void createUserTest(){
CreateUserCommand userCommand = new CreateUserCommand("zxc123", "비밀번호1","이름1","별명1");
CreateUserResponse createUserResponse = CreateUserResponse.builder()
.id(1L)
.email("zxc123@naver.com")
.password("비밀번호1")
.name("이름1")
.nickname("별명1")
.build();
when(createUserUseCase.createUser(userCommand)).thenReturn(createUserResponse);
SuccessApiResponse response = userController.createUser(userCommand);
verify(createUserUseCase, times(1)).createUser(userCommand);
assertEquals(createUserResponse, response.getData());
}
테스트 코드를 작성하는데 편리하도록 도와주는 도구들이 많다. 그 중에 하나는 Test Double인데 대신 해서 진행함으로써 테스트의 진행속도에 도움을 주는 방법이 있다. 그것은 총 Dummy, Stub, Spy, Fake, Mock들이 있고 각 객체들의 역할에 맞게 적절히 사용하는 것이 중요하다고 생각한다.
어떤 방법이 효율적인 방법인지 알아야 한다. 그러기 위해서 다음에는 TDD 방법들중에 2가지인 Classiscist TDD, Mockist TDD에 대해 알아볼 계획이다.