我對這個單元測試有一個非常簡單的設置。我有了一個委託屬性的類:爲什麼我的單元測試中我的對象的弱委託屬性爲零?
@interface MyClass : NSObject
...
@property (nonatomic, weak) id<MyDelegateProtocol> connectionDelegate;
...
@end
,我設置在我的測試委託:
- (void)testMyMethod_WithDelegate {
id delegate = mockDelegateHelper(); // uses OCMock to create a mock object
[[delegate expect] someMethod];
myClassIvar.connectionDelegate = delegate;
[myClass someOtherMethod];
STAssertNoThrow([delegate verify], @"should have called someMethod on delegate.");
}
但委託實際上並不在我的單元測試的3線設置,所以# someMethod永遠不會被調用。當我將其更改爲
myClassIvar.connectionDelegate = delegate;
STAssertNotNil(myClassIvar.connectionDelegate, @"delegate should not be nil");
它在那裏失敗。我使用的是ARC,所以我的直覺是,這個弱財產被釋放。果然,將其更改爲strong
會使STAssertNotNil
通過。但我不希望與代表那樣做,我不明白爲什麼這裏有所作爲。從我讀到的,ARC中的所有本地參考文獻都是strong
和STAssertNotNil(delegate)
。爲什麼當局部變量中的同一個對象不是,我的弱委託屬性爲零?
+1好極了,它似乎我[正確的想法](http://stackoverflow.com/a/9058542/31158)....感謝您找到正確的信息! – 2012-03-23 21:13:29
您可能想嘗試iOS 6.0模擬器。如果弱/代理問題是一個運行時錯誤(它是),這可能會在iOS 6.0中解決。我對它進行了測試,但無法評論它(因爲它仍在NDA之下)。但你真的應該嘗試一下。真。 – Jelle 2012-06-27 12:19:10