네트워크를 사용하는 코드 (특정하려면 NSURLConnection
클래스)를 테스트하고 싶습니다.NSURLConnection을 이용한 단위 테스트
- (id) buildConnection
{
// some more code and then:
return [NSURLConnection …];
}
- (void) startNetworkSync
{
id connection = [self buildConnection];
//…
}
단위 테스트에서 내가 즉, 네트워킹을 제거하고 싶습니다 : 코드 (의이 NetworkManager
를 부르 자)이 같은 비트가 보인다. NSURLConnection
객체를 모의 객체로 바꿉니다. 어떻게해야합니까?
스텁으로 buildConnection
메서드를 대체 할 NetworkManager
의 부분 모의 만들기를 시도했습니다. 문제는 외부 세계의 스텁 메시지 인 OCMock에 의한 부분적 모의입니다. startNetworkSync
에서 buildConnection
을 보내면 스텁이 아니라 원본 메서드가 호출됩니다.
나는 범주를 통해 NetworkManager
클래스의 원숭이 패치를 시도했습니다. 이 방법을 사용하면 buildConnection
메서드를 다른 코드로 쉽게 재정의하고 NSURLConnection
실제 코드를 스텁으로 바꿀 수 있습니다. 문제는 테스트에서 스텁 된 연결을 얻을 수있는 간단한 방법이 없다는 것입니다. 연결은 NetworkManager
의 개인 부분입니다.
그런 다음 NetworkManager
의 하위 클래스를 만들고 buildConnection
메서드를 재정의하고 인스턴스 변수와 만든 연결에 대한 접근자를 추가 할 수 있습니다. 하지만 이것은 많은 코드처럼 보입니다.
어떻게 해결할 수 있습니까? NetworkManager
클래스 디자인을 깨끗하게 유지하고 테스트에서 많은 마법이나 많은 코드가 필요하지 않은 솔루션을 찾고 있습니다.
좋아요, 나는이 방법으로 다소 성과가 있습니다. 클라이언트는 네트워크에 대해 아무것도 모르고 데이터 만 보내고 받지만 테스트에 도움이되는 프로세스에 '외부'연결을 주입하는 방법을 추가했습니다. 감사. – zoul
@ zoul, 솔루션 코드를 붙여주세요. 감사! – ma11hew28