2

我正在尝试在 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
}

这显然与我正在使用的测试框架无关,而是与它认为按钮没有任何连接到它们的操作有关。然而,当我运行应用程序时,按钮工作正常。

我错过了什么吗?

4

0 回答 0