2013-05-02 2 views
0

Magical Record 라이브러리를 통해 내 코드와 핵심 데이터 간의 상호 작용을 테스트하기 위해 Kiwi 프레임 워크를 사용하고 있습니다. Magical 레코드는 NSManagedObject에서 MR_createInContext : (NSManagedObjectContext *) 컨텍스트와 같은 몇 가지 좋은 메서드를 추가하는 범주를 정의합니다. 나는 더 열심히 시험하기를 시도하고있다, 그 방법은, 몇 번 호출된다.Kiwi + MagicalRecord 메소드가 존재하지 않습니다.

it(@"should create new object for me object with new id", ^{ 
    [[[NSManagedObjectContext MR_contextForCurrentThread] should] receive:@selector(MR_createInContext:)]; 
    Me *me = [Me meWithID:@"12345" inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; 
    [me shouldNotBeNil]; 
    [[me.idNumber should] equal:@"12345"]; 
}); 

문제는 키위 테스트하는 .m 파일에

#import <CoreData+MagicalRecord.h> 

에도 불구하고 해당 범주를 참조하지 않는 것이다.

ME_ShouldCreateNewObjectForMeObjectWithNewId (EHMeSpecs가) 실패 : -MR_createInContext 스텁 수없는, [실패] '나에게 새로운 ID로 객체를위한 ME는 새로운 객체를 생성해야한다'그런 방법은

존재하지 않기 때문에 어떻게의 키위 인식 할 수 있습니다 범주?

답변

0

물론이 방법은 NSManagedObjectContext가 아닌 NSManagedObject에 정의되어 있으므로 분명히 [[Me class] should] receive ... My bad.

0

테스트 이름을 보면, 핵심 데이터가 작동하는지 확인하고, 새 관리 대상 객체를 만들고, 올바른 ObjectID를 가지고 있는지 확인하려고합니다. 나는 키위가 어떻게 카테고리를 가로 챈 것인가를 알아야 할 필요성을 알지 못한다. 간단히 말해서 나는 당신과 같이 테스트를 작성합니다 :이 테스트와 함께, 그것은 암시 어쨌든 테스트 있기 때문에 범주가 작동하는지 테스트에 대해 걱정하지 마십시오

it(@"should create a new object", ^{ 

    NSManagedObjectContext *testContext = [NSManagedObjectContext MR_context]; 
    id myObject = [MyEntity createWithStuff:@{...} inContext:testContext]; 

    assertThat(myObject, isNot(nil)); 
    assertThat([myObject someAttrbiute], is(equalTo(@"some value"))); 
}); 

. 이 테스트가 중단되면 카테고리가 작동하지 않는다는 사실을 매우 빨리 알 수 있습니다.

테스트 규칙 중 하나는 "언어 또는 프레임 워크를 테스트하지 마십시오"입니다. 카테고리가 작동하는지 테스트하기 위해이 규칙을 위반하고 다른 사람이 테스트 한 결과를 테스트합니다.

+0

이 메서드는 새로운 메서드를 생성하거나 반입 된 개체를 반환합니다. 테스트 할 필요가 있습니다. 객체를 처음으로 볼 때이를 확인하고, 객체가 생성되고 nil이 리턴되지 않는다는 것을 확인하고 싶습니다. 따라서 MR_createInContext가 반입됩니다. BTW 내가 오류를 발견,이 메서드는 컨텍스트가 아닌 NSManagedObject에 정의되어 있습니다. – foFox

+0

MR_createInContext가 호출됩니다. * – foFox

관련 문제