小编Ada*_*man的帖子

为什么我的对象的弱委托属性在我的单元测试中为零?

我有一个非常简单的单元测试设置.我有一个具有委托属性的类:

@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?

unit-testing objective-c ios automatic-ref-counting

13
推荐指数
1
解决办法
2443
查看次数