2011-10-21 3 views
2

객관식 리소스를 사용하여 원격 응답을 반영하는 응용 프로그램이 있습니다.iOS Kiwi를 사용하여 등록 정보로 모의 하위 클래스 테스트하기

특정 모델 클래스에는 다양한 추가 기능을 제공하는 서브 클래스가 있으며 가장 중요한 것은 특정 등록 정보가 무엇인지에 관계없이 디스크 직렬화, 디스크 쓰기 및 디스크로드 기능을 제공하는 것입니다. 그 특정 모델 객체.

superclass.m 

-(BOOL)saveToDisk{ 
    ...serializes and encodes all properties to disk 
    ...return success 
} 


subclass.h : superclass 

@property (nonatomic, retain) NSString* name; 
@property (nonatomic, retain) NSArray* friends; 
...etc 

그리고 나는 일반적으로 BDD 및 테스트 주도 개발에 새로운 오전

 instanceOfSubclass.name = "joe" 
    NSLog(@"save status = %d",[instanceOfSubclass saveToDisk]); 

을 부를 것이다. 이 프로젝트를 많은 프로젝트에서 사용하기 때문에 키 객체를 사용하여 모의 객체를 만들어서 어떻게 추상적으로 테스트 할 수 있습니까?

특히, 다양한 유형의 속성이있는 하위 클래스를로드, 삭제 및 덮어 쓸 수 있는지 확인하는 테스트를 작성하고 싶습니다.

내 이해는 스텁과 모의가 들어오는 곳이지만 내 생각에는 속성을 조롱하는 방법을 알 수 없습니다. 이러한 속성을 가진 실제 클래스를 만들어야합니까?

답변

0

this location에는 몇 가지 설명서가 있습니다. 기본적으로 키위는 #import "Kiwi.h"에 액세스 할 수있는 NSObject에 Objective-C 카테고리를 제공합니다. 이를 통해 NSObject에서 상속받은 모든 객체는 +mock, mockWithName: 등으로 응답 할 수 있으며 KWMock 클래스를 통해 구성 할 수 있습니다.

희망이 도움이, 미안 그 조금 늦게 :)

+0

문서 링크가 끊어진 경우 github : https://github.com/kiwi-bdd/Kiwi/wiki/Mocks-and-Stubs를 방문하십시오. – manroe

1

속성 때문에, 배후 방법이 있습니다 : 나는 @aopsfan 언급으로 +mock 방법의 조합으로이 작업을 수행하기 위해 관리

, -stub:andReturn:을 사용하여 속성을 구현 한 메서드의 이름을 추측했습니다.

// Instantiates a mocked object: 
id fake_connection = [TCConnection mock]; 
// Creates a faked property accessor: 
[fake_connection stub:@selector(parameters) 
      andReturn:@{@"From": @"fake-caller"}]; 

// I could now call my TCDeviceDelegate 's 
// -device:didReceiveIncomingConnection: 
[myActualObject device:myActualObject.device 
      didReceiveIncomingConnection:fake_connection]; 
// Check some results on the object: 
[[myActualObject.connection should] equal:fake_connection]; 

이 패턴 특정 예는 아마 다른 상황으로 일반화 될 수있다 :이 예는합니다 (Twilio iOS SDK에서)를 TCConnection를 가장,했다. -stub (andReturn: 제외) 매개 변수를 호출하면 시뮬레이트 된 조명기에서 호출 할 수없는 메서드를 음소거하는 것이 유용합니다.

관련 문제