2014-10-14 2 views
0

NSManagedObject 하위 클래스를 테스트하기 시작했습니다. 테스트 케이스 중 하나에서 일관성없는 결과가 저장 및 페치되는 문제가 있습니다.CoreData UnitTest 일관성없는 결과

내 설정은 매우 간단합니다. 테스트를 위해 메모리 내장 저장소가 있습니다. 나는 시험을 통해 참조를 붙잡는다. 만들기 내 개체 구문 분석 및 구성, 1. JSON 파일에서 데이터를 읽어 2. 저장 3.

- (void)setUp { 
    [super setUp]; 

    if(!self.manager){ 
     self.manager = [DataManager inMemoryManager]; 
    } 
    [self.manager.managedObjectContext reset]; 
} 

테스트 케이스는 간단하다 :

테스트 설정에

, 나는 영구 저장소를 지우 객체의 외부 ID에 대한 가져 오기 요청 (하나만 있어야 함)

테스트 케이스를 단독으로 실행하거나 테스트 클래스를 실행하는 경우 예상대로 1 개의 결과를 얻습니다. 그러나 모든 유닛 테스트와 클래스를 실행하면 가져온 결과가 3 개가됩니다. 때로는 관계가 양호 (통과)하고 다른 경우는 실패 (관계 없음) 일 수 있습니다.

설정이 끝날 때마다 컨텍스트를 재설정 할 때마다 각 테스트마다 빈 슬레이트가 있어야합니다. 그렇지 않아야합니까?

대신 데이터 샘플을 오염시키는 다른 테스트 케이스에서 남은 부분을 얻었지만 문제를 해결하는 방법을 알지 못합니다.


이 경우 당신이 가져온 결과에 관심이 :

<__NSArrayM 0x7f9b2842c650>(
<MyObject: 0x7f9b28435430> (entity: MyObject; id: 0x7f9b28440370 <x-coredata://9CE4448C-6595-47FC-A189-58A83F708D96/MyObject/p11> ; data: { 
    externalID = 222abc; 
    theChildren =  (
     "0x7f9b2843f020 <x-coredata://9CE4448C-6595-47FC-A189-58A83F708D96/ChildObject/p9>", 
     "0x7f9b2843fec0 <x-coredata://9CE4448C-6595-47FC-A189-58A83F708D96/ChildObject/p12>" 
    ); 
}), 
< MyObject: 0x7f9b28440c00> (entity: MyObject; id: 0x7f9b28731890 <x-coredata://9CE4448C-6595-47FC-A189-58A83F708D96/MyObject/p5> ; data: <fault>), 
< MyObject: 0x7f9b28440c60> (entity: MyObject; id: 0x7f9b28729490 <x-coredata://9CE4448C-6595-47FC-A189-58A83F708D96/MyObject/p3> ; data: <fault>) 
) 

답변

0

setUp은 테스트 스위트에 한 번, 각 시험 전에 다시 전화를해야하는 것이라고합니다. Specta로 전환하고 다시 사용하려면 beforeEach을 사용하는 것이 좋습니다. (example - 비록 관리 대상 콘테스트가 아니지만)

+0

나는 그럴 수도 있다고 생각했지만이 설명을 발견했다. http://stackoverflow.com/a/21040654/694080 – Cameron

+0

설정을 지우고 해체하는 경우에도 문제가 계속 발생합니다. 또한 수정없이 각 테스트 케이스에서 이전과 이후에 지우기를 시도했습니다. 만약''context save : & error ''(다른 테스트 클래스에서)를 사용하는 다른 테스트를 주석 처리하면 괜찮을 것으로 보인다. 내 inMemoryManager를 싱글 톤이 아니게 만드는 것이 도움이되는 것처럼 보일 수 있으므로 각 테스트마다 자체 인스턴스가 생성됩니다 (더 좋거나 나쁨). 소리가 나는 것처럼 보이지 않지만 이런 경우에는 받아 들일 수 있습니까? – Cameron

+0

왜 처음에는 싱글 톤 이었습니까? – quellish

관련 문제