objective-c - iPhone 测试 : testing IBOutlets

标签 objective-c ios ocunit

我实际上觉得问这个问题有点尴尬,因为它感觉很基本,但它已经困扰了我几个小时......

假设我有一个 UIViewController 实例(称为 MyViewController),它只有一个 IBOutlet 到 UITextField,当页面加载时,我根据 BOOL 属性将其设置为启用或不启用。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.surname.enabled = self.allowTextField;
}

一切都正确连接,当我运行该应用程序时,它按预期工作(上帝 - 我希望如此,因为如果我不能正确完成那部分,我可能不应该编写 iPhone 应用程序...) .

无论如何,我决定勤奋地为应用程序编写应用程序单元测试,因为这是我想要变得更加扎实的东西。不幸的是,我无法理解为什么以下内容不起作用......

-(void)testFieldEnabled {
    MyViewController *myController = [[MyViewController alloc] initWithNibName:nil bundle:nil];
    myController.allowTextField = YES;
    [myController viewDidLoad];
     STAssertTrue(myController.surname.enabled, @"Why is this not correct?");
}

我一直保持这个示例非常简单,因为我真的不明白为什么它不起作用,并且相信这一定是因为我对单元测试的理解存在重大缺陷。上面的单元测试不应该启动 MyViewController 页面的实例,设置属性,运行方法并返回 true 吗?目前它一直告诉我姓氏文本字段未启用。

感谢您的帮助,祝大家新年快乐!

最佳答案

这是因为手动调用 viewDidLoad 并不会真正加载 View 。您应该调用 View Controller 的 View 属性,它将自动加载 View (或手动调用 loadView)。

关于objective-c - iPhone 测试 : testing IBOutlets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8687378/

相关文章:

objective-c - 如何使用 NSPredicate 捕获子对象?

objective-c - NSDate 的字符串描述

iPhone - Facebook 连接

ios - 获取 SKPhysicsBody 以在纹理动画时更新 (Swift)

ios - 在调试构建配置中将图像复制到设备

ios - 如何将这个值转换成绝对值?

ios - 乱序调用的 SQLite3 库例程

unit-testing - OCUnit:如何在不启动 iPhone 模拟器的情况下运行测试?

ios - 是否可以测试 IBAction?

ios - OCUnit 测试从命令行失败,但在使用钥匙串(keychain)服务时在 Xcode 中工作