gpt4 book ai didi

ios - 如何使用OCMock测试UIButton的setTitle

转载 作者:行者123 更新时间:2023-12-01 17:55:25 24 4
gpt4 key购买 nike

经过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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com