我正在尝试在 Xcode 中为我的视图控制器创建一些测试,包括检查 IBOutlets 和 IBActions 的测试。如果我使用基本视图控制器 + xib 文件,这些工作正常,但如果我使用 Storyboard 文件,那么这些操作似乎不会被连接起来。
这是设置:
- (void)setUp
{
[super setUp];
UIStoryboard *settingsStoryboard = [UIStoryboard storyboardWithName:@"SettingsStoryboard" bundle:nil];
self.viewController = [settingsStoryboard instantiateViewControllerWithIdentifier:@"SettingsViewController"];
[self.viewController view];
}
然后是测试(XCTest、OCHamcrest 和 OCMock,它们都失败了):
- (void)testPartialDatabaseRefreshButtonSelector
{
NSArray *actions = [self.viewController.partialDatabaseRefreshButton actionsForTarget:self.viewController forControlEvent:UIControlEventTouchUpInside];
// actions is nil!!
// XCTest:
XCTAssertTrue([actions containsObject:NSStringFromSelector(@selector(partialDatabaseRefreshButton_onTouchUpInside:))], @"partialDatabaseRefreshButton has no selector");
// FAILS
// OCHamcrest:
assertThat([self.viewController.partialDatabaseRefreshButton actionsForTarget:self.viewController forControlEvent:UIControlEventTouchUpInside], contains(@"partialDatabaseRefreshButton_onTouchUpInside:", nil));
// FAILS
// OCMock:
id mock = [OCMockObject partialMockForObject:self.viewController];
[[mock expect] partialDatabaseRefreshButton_onTouchUpInside:[OCMArg any]];
//simulate button press
[self.viewController.partialDatabaseRefreshButton sendActionsForControlEvents:UIControlEventTouchUpInside];
[mock verify];
// FAILS
}
这显然与我正在使用的测试框架无关,而是与它认为按钮没有任何连接到它们的操作有关。然而,当我运行应用程序时,按钮工作正常。
我错过了什么吗?