经过OCUnit和OCMock的速成 class 之后,我不得不问一个问题。也许这是一件容易的事,但是我无法解决这个问题。

在这种微小的小方法中:

- (void)setLoginButtonTitleForState:(BOOL)isLoggedIn {

if (isLoggedIn) {

    [_loginButton setTitle:@"Logout" forState:UIControlStateNormal];
}
else {
    [_loginButton setTitle:@"Login" forState:UIControlStateNormal];
}

}

我想测试标题标签是否正确填充。由于我正在学习如何为此类情况编写测试,因此我在编写测试之前就编写了该方法。但是我还是必须执行测试。

如果有任何以前做过的人,请帮助我。
到目前为止,这是我所做的:
- (void)test_checkLoginAndSetLoginButtonAndTitle_loggedIn {
    MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
    id mock_vc = [OCMockObject partialMockForObject:myViewController];


    UIButton *loginButton = [[UIButton alloc] init];
    id mock_button = [OCMockObject partialMockForObject:loginButton];

    [mock_vc setLoginButton:mock_button];

    [[mock_vc expect] setLoginButtonTitleForState:YES];

    [[mock_button expect] setTitle:@"Logout" forState:UIControlStateNormal];

    [mock_vc verify];
}

所以问题是:我在这里做错了什么?

顺便说一句:运行测试时,出现以下错误:
/Unknown.m: OCPartialMockObject[MyViewController]: expected method was not invoked: setLoginButtonTitleForState:YES

我不知道为什么它不调用该方法,因为它是 public 的且可访问的。

如果有人对我有提示,请告诉我!

最佳答案

因此,也许这不能直接回答您对[UIButton setTitle:forState:]进行测试的问题,但是我认为您不应该测试现有的Apple API。为了测试您设置登录按钮标题的逻辑,我实际上会对其进行更改,以便它返回一个字符串,该字符串将以其他方法设置按钮上的任何标题。这就是我的意思:

- (void)setLoginButtonTitleForState:(BOOL)isLoggedIn {
  [_loginButton setTitle:[self buttonTitleForLoggedIn:isLoggedIn] forState:UIControlStateNormal];
}

- (NSString *)buttonTitleForLoggedIn:(BOOL)loggedIn {
  return (loggedIn) ? @"Logout" : @"Login";
}

您的测试将如下所示:
- (void)test_checkLoginAndSetLoginButtonAndTitle_loggedIn {
    MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
    STAssertEqualObjects([myViewController buttonTitleForLoggedIn:YES], @"Logout", @"After logging in, the 'login' button's title should be set to logout");
}

关于ios - 如何使用OCMock测试UIButton的setTitle,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18699071/

10-14 21:43
查看更多