2012-06-13 6 views
0

PHPUnit을 사용하여 클래스 메쏘드 Mail의 테스트를 작성하려고합니다. 테스트 할 메소드는 saveMessage ($ arguments)입니다. saveMessage는 저장 외에도 클래스 메서드 $this->emailMessage($arguments)을 호출 할 수 있습니다. saveMessage를 테스트하는 테스트를 작성하고 emailMessage가 올바른 인수로 올바르게 호출되었는지 테스트하지만 실제 emailMessage 메소드는 호출하지 않습니다.PHPUnit : 의존적 메소드를 재정의하고 테스트하는 방법

메일을 서브 클래스 화하고 emailMessage 메서드를 재정의 할 수있는 한 가지 방법이 있습니다. 더 매력적인 방법은 조롱 된 객체에서 saveMessage 메소드를 테스트하는 동안 Messages 클래스를 모방하고 emailMessage 메소드를 대체하는 것입니다. 그러나 그때 나는 조롱 된 객체 자체를 테스트 할 것입니다. 나는 그것이 나쁜 생각 인 것을 읽었지 만, 나는 왜이 경우에, 왜 확실하지 않다. 이를 위해 mock 객체를 사용하는 것이 안전합니까? 이 문제를 해결할 더 좋은 방법이 있습니까?

+0

나는 Mail의 테스터 서브 클래스를 만드는 것이 가장 쉽고 깨끗한 방법이라고 생각한다. 이 일을하고 싶지 않은 이유가 있습니까? 테스트에서 고정 I_got_here 변수를 FALSE로 초기화 한 다음 재정의 한 emailMessage 함수에서 I_got_here 변수를 true로 설정 한 다음 테스트에 다시 넣으면 I_got_here가 true라는 것을 주장합니다. 마찬가지로 재정의 한 emailMessage 함수에 전달 된 인수를 다시 전달할 수 있습니다. –

답변

0

나는이 범주가 "What to test and what not to test"에 해당한다고 생각합니다.이 질문을 모른 채이 질문에 대답하기는 어렵습니다.

예를 들어 이 아닌 이유는이 맞습니까? 그들은 조작 되었습니까? 조작 코드를 자체 테스트 및 유닛 테스트에 넣을 수 있습니다.

saveMessage 메서드에서 asserts을 사용할 수 있으며 단정 테스트에서 어설 션 오류가 발생하지 않았는지 확인하십시오.

이 질문은 내가 테스트 할 수있는 코드의 설계와 관련이 있습니다.

관련 문제