OCMock을 사용하여 일부 핵심 데이터 개체를 모의합니다. 이전에, 나는 특성은 오브젝티브 C 1.0 스타일의 명시 적 접근으로 구현했다 :OCMock with Core Data 동적 속성 문제
// -- Old Core Data object header
@interface MyItem : NSManagedObject {}
- (NSString *) PDFName;
- (void) setPDFName:(NSString *)pdfName;
@end
// -- implementation provides generated implementations for both getter and setter
는 지금은 오브젝티브 C 2.0의 코드를 이동하고 새로운 @property 구문을 활용하고자하고, 동적했습니다 코어 데이터 객체에 대한 -generated 메소드 구현 : 나는 모의 항목을 만들 때
// -- New Core Data object header
@interface MyItem : NSManagedObject {}
@property (nonatomic, retain) NSString *PDFName;
@end
// -- Core Data object implementation
@implementation MyItem
@dynamic PDFName;
@end
, 지금, 동적 속성을 처리하지 않는 것 :
// -- creating the mock item
id mockItem = [OCMockObject mockForClass:[MyItem class]];
[[[mockItem stub] andReturn:@"fakepath.pdf"] PDFName]; // <-- throws exception here
T 그는 다음과 같이 오류가 발생합니다 :
Test Case '-[MyItem_Test testMyItem]' started.
2009-12-09 11:47:39.044 MyApp[82120:903] NSExceptionHandler has recorded the following exception:
NSInvalidArgumentException -- *** -[NSProxy doesNotRecognizeSelector:PDFName] called!
Stack trace: 0x916a4d24 0x92115509 0x97879138 0x978790aa 0x9090cb09 0x97820db6 0x97820982 0x10d97ff 0x10d9834 0x9782005d 0x9781ffc8 0x20103d66 0x20103e8c 0x20103642 0x20107024 0x20103642 0x20107024 0x20103642 0x20105bfe 0x907fead9 0x977e4edb 0x977e2864 0x977e2691 0x90877ad9 0xbf565 0xbf154 0x107715 0x1076c3 0x1082e4 0x89d9b 0x8a1e5 0x894eb 0x907e81c7 0x978019a9 0x978013da 0x907dd094 0x907ea471 0x9478c7bd 0x9478c1b9 0x94784535 0x5ede 0x326a 0x5
Unknown.m:0: error: -[MyItem_Test testMyItem] : *** -[NSProxy doesNotRecognizeSelector:PDFName] called!
뭐가 잘못 됐나요? 코어 데이터/객체를 @dynamic 속성으로 조롱하는 또 다른 방법이 있습니까?
완전성을 위해서 단지 여기에 답을 다시 게시하십시오. 이것은 답이 아닙니다. 그 링크가 죽으면 어떡하지? – Bach
완료 ... OCMock 포럼에서 내 게시물을 복사했습니다. –
테스트에서 실제 NSManagedObject를 사용하지 않는 이유는 무엇입니까? 프로토콜이 관리 대상 객체 모델과 일치하는지 확인하는 다른 테스트가 있습니까? – ImHuntingWabbits