루비로 예를 들어 보겠습니다. 친구를 만나면 인사하는 로직이 있다고 해봅시다. 다음은 Person.rb의 일부입니다.
def meet(other)
puts other.name + '님, 안녕하세요' if is_friend?(other)
end
여기서 meet 메서드를 테스트 하려면 어떻게 해야할까요? 저같은 경우엔 다음과 같이 수정했습니다.
def meet(other)
@msg = other.name + '님, 안녕하세요' if is_friend?(other)
end
def speak
puts @msg
@msg = ''
end
이렇게 하면 @msg의 값으로 테스트할 수 있습니다. 이보다 더 좋은 방법이 있을까요?
나도 일반적으로는 질문에서 제시한 방식으로 테스트한다. 콘솔의 경우에는 가장 쉬운 방법일 듯하다.
하지만 return 값이 없은 다른 메소드는 어떻게 하는 것이 좋을까? 자바의 경우 return 값이 없는 method의 경우 mockito와 같은 mock framework을 사용하면 verify 라는 메소드를 통해 현재 메소드의 호출 상태를 테스트할 수 있다.
위의 경우도 meet 메소드를 호출할 경우 puts에 인지로 어떤 값이 전달되는지를 검증함으로써 정상적으로 구현되었는지를 파악할 수 있다. ruby의 경우 이와 관련해 훨씬 더 유연한 방식으로 처리할 수 있지 않을까 생각한다. 나도 ruby 경험이 짧아서 딱히 모르겠는데 찾아보면 있을 듯하다. 같이 함 찾아보자.
2개의 의견 from SLiPP
나도 일반적으로는 질문에서 제시한 방식으로 테스트한다. 콘솔의 경우에는 가장 쉬운 방법일 듯하다.
하지만 return 값이 없은 다른 메소드는 어떻게 하는 것이 좋을까? 자바의 경우 return 값이 없는 method의 경우 mockito와 같은 mock framework을 사용하면 verify 라는 메소드를 통해 현재 메소드의 호출 상태를 테스트할 수 있다.
위의 경우도 meet 메소드를 호출할 경우 puts에 인지로 어떤 값이 전달되는지를 검증함으로써 정상적으로 구현되었는지를 파악할 수 있다. ruby의 경우 이와 관련해 훨씬 더 유연한 방식으로 처리할 수 있지 않을까 생각한다. 나도 ruby 경험이 짧아서 딱히 모르겠는데 찾아보면 있을 듯하다. 같이 함 찾아보자.
java의 mockito와 비슷한게 ruby에서 mocha라는 젬이 있네요. 바로 적용해 봤습니다!
Gemfile의 일부
person_test.rb의 일부
person.rb의 일부
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.