【问题标题】:Way of setting instance variable for unit testing为单元测试设置实例变量的方法
【发布时间】:2014-10-16 23:35:44
【问题描述】:
我有一个名为 TimePass 的 NSObject 子类。它有一个属性
NSString *name
在 TimePass 的 (.m) 文件中,我为我的属性名称定义了一个构造函数
-(NSString *) name {
self.name = @"aseem";
return self.name;
}
当我在单元测试类中测试它的XCTAssertNotNil 时,它给了我一个错误。我正在测试它是否是nil。如果我用_name 替换self.name,它就可以正常工作。
【问题讨论】:
标签:
ios
unit-testing
instance-variables
【解决方案1】:
您不想像以前那样覆盖属性的设置器,因为您可能会陷入无限循环。考虑你的方法:
- (NSString *)name {
self.name = @"aseem";
return self.name;
}
你将 self.name 设置为@"aseem",然后返回 self.name,所以当你真正对 self.name 做任何事情时,你实际上是调用你刚刚创建的 name 方法,因此您将 self.name 再次设置为 aasem 并告诉它返回 self.name,再次调用该方法,依此类推。简而言之,在 return 中使用 _name 实例变量绕过了一遍又一遍地调用函数,并简单地返回你刚刚设置的字符串。
与其创建属性,不如使用这样的实例变量:
#import <XCTest/XCTest.h>
@interface YourTestClass : XCTestCase {
NSString *_name;
}
@end
@implementation YourTestClass
- (void)setUp {
[super setUp];
_name = @"aseem";
}
@end