单元测试IBOutlet的属性

时间:2013-08-23 06:15:40

标签: ios objective-c unit-testing ios6 gh-unit

我使用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

为什么会这样?

要测试delegate的{​​{1}}属性,我尝试了以下行:

IBOutlet

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

失败

有什么问题?

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

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

2 个答案:

答案 0 :(得分:3)

在测试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方法中 - 如果需要的话。

答案 1 :(得分:0)

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

那就是你需要附加它或者从界面构建器将textfield连接到它的属性。

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