在与 OCUnit 和 OCMock 进行了一些速成课程之后,我不得不问一个问题。也许这很容易,但我无法理解。
在这个小小的方法中:
- (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
我不知道为什么它不调用该方法,因为它是公开的且可访问的。
如果有人对我有提示,请告诉我!