【发布时间】:2012-10-16 18:21:25
【问题描述】:
为了我自己的参考,我正在编写一个单元测试模板项目。这包括所有基本任务的模板代码,例如在 viewDidLoad 之后验证 UILabel 的文本属性是否按预期设置。
我有一个带有一个 UILabel 的 ViewController 的故事板。在 viewDidLoad 我设置它的文本。然后测试断言文本是否已按预期设置,但由于某种原因,UILabel 始终为 nil。当我运行应用程序时,一切都按预期工作(感谢上帝);显示带有预期文本标签的白色视图。
我使用 Kiwi 作为我的测试框架和 Xcode v4.5。
这里有一些代码:
ViewController.h:
@property (strong, nonatomic) IBOutlet UILabel *myLabel;
ViewController.m:
- (void)viewDidLoad {
myLabel.text = @"test";
}
ViewControllerTests.m:
ViewController *vc = [[ViewController alloc] init];
// create view in memory by calling view's getter
[vc view];
// set myLabel.text to "test"
[vc viewDidLoad];
[vc.myLabel shouldNotBeNil];
[[vc.myLabel.text should] equal:@"test"];
上述测试失败,告诉我 myLabel 为 nil。
This StackOverflow answer 声明调用 loadView 将在内存中创建视图层次结构,从而准备任何子视图以供使用。 According to the documentation,只需调用 ViewController 视图的 getter 即可为您调用 loadView 并创建所有视图。因此,我发现测试时 myLabel = nil 非常奇怪。
【问题讨论】:
标签: ios unit-testing tdd ios6