2011-12-29 2 views
1

가장 좋은 방법은 아니지만 객체의 private 메소드가 호출되었는지 확인하고 싶습니다. 그래서 부분 모의 객체를 만들고 개인적인 방법에 대한 기대.부분 모의 객체에서 메소드를 '기대'할 수 있습니까?

Synchronizer * sync = [[Synchronizer alloc] initWithCleanup:YES]; 

sync = [OCMockObject partialMockForObject:sync]; 
[[(id)sync expect] cleanupPreviousContents];  

테스트를 실행하면 cleanupPreviousContents는 호출되지 않지만 테스트는 성공적으로 수행됩니다. 버그는 어디에 있습니까?

감사합니다, 쿠엔틴

답변

7

예,이 할 수있는 완벽하게 유효한 것입니다. 그러나 당신은 당신의 부분 모의에 대한 새로운 기준을 만들 필요가 :

Synchronizer * sync = [[Synchronizer alloc] initWithCleanup:YES]; 

id mockSync = [OCMockObject partialMockForObject:sync]; 
[[mockSync expect] cleanupPreviousContents]; 

... do something 

[mockSync verify]; 

은 당신의 initWithCleanup 메소드 내 cleanupPreviousContents라고? 그렇다면 조금 다르게 구조해야합니다 :

Synchronizer *sync = [Synchronizer alloc]; 

id mockSync = [OCMockObject partialMockForObject:sync]; 
[[mockSync expect] cleanupPreviousContents]; 

[sync initWithCleanup:YES]; 

[mockSync verify]; 
+0

우연한 분할 할당/초기화! :) – buildsucceeded