单元测试 IBOutlet 的属性

Posted

技术标签:

【中文标题】单元测试 IBOutlet 的属性【英文标题】:Unit testing IBOutlet's properties 【发布时间】:2013-08-23 06:15:39 【问题描述】:

我使用GHUnit。我要测试IBOutlet的属性如isHiddendelegate

我尝试了下面的代码来测试 myView 是否被隐藏:

- (void)testViewDidLoad

    // Call view on viewcontroller which will load the view if not loaded
    [testClass view];

    // Tests
    testClass.myView.hidden = YES;

    if (testClass.myView.isHidden) 
        GHTestLog(@"Hidden");
    
    else 
        GHTestLog(@"Not Hidden");
    

这总是记录Not Hidden,而在记录之前我将它设置为hidden = YES

这是为什么?

为了测试IBOutletdelegate 属性,我尝试了以下行:

GHAssertNotNil(testClass.textField.delegate, @"delegate is nil.");

Reason : ((testClass.textField.delegate) != nil) should be FALSE. 失败

怎么了?

编辑: 尝试了下面的代码,但不起作用。

[testClass view];

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                         bundle:[NSBundle bundleForClass:[self class]]];
GHAssertNotNil(storyboard, nil);

// Tests
GHAssertTrue(testClass.myView.isHidden, nil);  // This fails

【问题讨论】:

你有验证testClass.myView 不为零的测试吗? @FlorianMielke 你是对的。 myView 为零。但是当我调用[testClass view]; 时,它不应该被初始化吗?或者有什么方法可以初始化?重点是 IBOutletweak 属性。 您使用的是XIB还是故事板作为界面? @FlorianMielke 故事板。 【参考方案1】:

在测试 UIStoryboard 中包含的视图时,请确保您已将情节提要文件添加到测试目标中。

我还建议您进行一个测试来验证您的故事板是否已成功初始化,如下所示:

- (void)testStoryboardShouldBeInitialized

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"NameOfStoryboard" bundle:[NSBundle bundleForClass:[self class]]];
    STAssertNotNil(storyboard, nil);


编辑

您首先必须从情节提要中实例化您想要测试的视图控制器,然后您可以测试您的插座:

UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"ViewControllerIdentifier"];
[controller view];
GHAssertTrue(controller.myView.isHidden, nil);

我还建议测试(以单独的方法)您的视图控制器是否已成功实例化。如果需要,我还将控制器初始化移到您的 setUp 方法中。

【讨论】:

试过了。不工作。我已经发布了我尝试过的确切代码。【参考方案2】:

这是因为界面生成器上的 IBTextField 无法找到已定义的文本字段属性。

也就是说,您需要从界面构建器将其附加或将文本字段连接到其属性。

(或者可能是因为您的testClass 无法指向或授予对textField 的访问权限。)

【讨论】:

以上是关于单元测试 IBOutlet 的属性的主要内容,如果未能解决你的问题,请参考以下文章

如何从情节提要中加载原型单元?

无法读取未定义单元测试酶的属性“contextTypes”

如何使用属性单元测试自定义视图

验证属性或配置的单元/集成测试

单元测试之NUnit二

如何运行单元测试来测试具有 argparse 属性的脚本?