2011-03-10 3 views
5

내가 다음 의사 코드로 정의 된 클래스 및 방법을 말해봐mock 또는 스텁이 유효하다는 것을 확인하는 방법은 무엇입니까?

class Book 
    def quick_info 
    return title + " " + author 
    end 
end 

나는의 그루터기를 만드는 것이 Book 클래스를 사용하여 일부 다른 클래스의 단위 테스트를 쓰고 있어요 경우 메소드 호출은 Book.quick_info입니다.

quick_info 메서드의 이름이 short_description으로 바뀐 경우와 같이 Book 클래스를 변경해야하는 경우 문제가 발생할 것입니다. 내 단위 테스트는 여전히 quick_info을 사용하게 될 것이고 실제로 테스트가 실패 할 때 내 테스트가 잘 통과하는 것처럼 보일 것입니다.

내 테스트의 스텁/모의이 실제로 올바른 클래스와 메소드로 구성되었는지 확인하기 위해 실행할 수있는 것이 있는지 궁금합니다. 어쩌면 이런 일이 계속해서 일치하는지 확인하기 위해 연속 통합 서버에서 실행될 수 있습니까?

안녕하세요 .... 이제는 나에게 생각이 생겼습니다. 존재하지 않는 mock/stubbed 메소드를 생성 할 수 있습니까? 그렇지 않다면이 모든 질문은 논박의 대상입니다.

편집 : 난 그냥 RSpec에 2 그리고 나는 내가 Book 인스턴스를 생성하고 i_dont_exist라는 메서드를 작성하고 내가 잘 호출 할 수 있습니다 알고 사용하여이 밖으로 시도

. 그래서 제 질문은 여전히 ​​있습니다. 내 모의 객체/스텁이 실제로 존재하는 클래스/객체와 일치하는지 확인하는 방법이 있습니까? 그것은 기존 개체를 조롱하는 당신을 필요로하지만

Mocha::Configuration.prevent(:stubbing_non_existent_method) 

:

답변

4

모카는이에 대한 옵션이 있습니다. '스크래치'에서 모의 ​​객체를 만드는 경우 작동하지 않습니다 (어떤 메소드가 있어야할지 모르기 때문에).

모범 사례 측면에서 IMHO는 잘못된 방향에서보고 있습니다. Book 클래스의 단위 테스트도 있어야하므로 메소드 이름을 변경할 때 테스트 실패가 발생합니다. 이 메소드에 대한 호출이 더 있는지를보기 위해 코드를 'grep'하기위한 충분한 신호이어야합니다.

또한 (단 한 가지 예가 아닌 경우) 왜 어쨌든 도서를 모의하고 싶습니까? 이는 단지 데이터 일뿐입니다. 대개 외부 서비스 등을 조롱하고 테스트에서 실제 데이터 객체로 작업하려고합니다.

+0

언급 한대로 문제는 외부 서비스가 대개 조롱을 받았다는 것입니다 (예 : 웹 서비스). 그런 경우 단위 테스트가 없습니다. 하지만 아마도 통합 테스트의 적용을 받아야할까요? 'Book'에 관해서는 내 예제를 명확히하기 위해 사용되었지만 나쁜 예라고 생각합니다. – Fendo

관련 문제