我有一个非常简单的单元测试设置.我有一个具有委托属性的类:
@interface MyClass : NSObject
...
@property (nonatomic, weak) id<MyDelegateProtocol> connectionDelegate;
...
@end
Run Code Online (Sandbox Code Playgroud)
我在我的测试中设置了委托:
- (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.");
}
Run Code Online (Sandbox Code Playgroud)
但是代理实际上并没有设置在我的单元测试的第3行,所以#someMethod从未被调用过.当我改为
myClassIvar.connectionDelegate = delegate;
STAssertNotNil(myClassIvar.connectionDelegate, @"delegate should not be nil");
Run Code Online (Sandbox Code Playgroud)
它失败了.我正在使用ARC,所以我的预感是弱房产被解除分配.果然,它更改为strong使STAssertNotNil通.但是我不想与代表那样做,我不明白为什么这会有所作为.根据我的阅读,ARC中的所有本地参考文献都是strong,并STAssertNotNil(delegate)通过.当局部变量中的同一对象不是时,为什么我的弱委托属性为nil?