我使用GHUnit
。我想测试IBOutlet
的属性,如isHidden
、delegate
等。
我尝试了以下代码来测试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
。
为什么会这样?
为了测试IBOutlet
的delegate
属性,我尝试了以下行:
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
在测试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方法中。
也就是说,您需要附加它,或者从接口生成器将文本字段连接到它的属性。
(或者可能是因为您的testClass
无法指向或访问textField
。)