我有触发模型中的异步请求,并将该处理的响应的块的方法:如何模拟块的结果作为方法参数?
[user loginWithEmail:self.eMailTextField.text
andPassword:self.passwordTextField.text
block:^(UserLoginResponse response) {
switch (response) {
case UserLoginResponseSuccess:
{
// hooray
break;
}
case UserLoginResponseFailureAuthentication:
// bad credentials
break;
case UserLoginResponseFailureB:
// failure reason b
break;
default:
// unknown error
break;
}
}];
所调用的方法设置了一些参数的请求,并使用AFNetworking来启动它。
现在我想写一个单元测试,以确保调用类对每个可能的UserLoginResponse做出正确反应。我使用Kiwi进行测试,但我认为这是一个更普遍的问题...
我该如何模拟从用户对象传递给块的参数? 我能想到的唯一方法是嘲笑底层请求并返回我期望用于测试的状态码。有没有更好的办法?
它也可以通过使用委托来替换块,但我肯定会更喜欢在这里使用块。
谢谢,这真的帮了很多!我已经把' - (AuthenticationHandlerBlock)authenticationHandler;'放在我的ViewController中调用用户登录。唯一的缺点是我有一个新的公开方法。 原来的方法现在只是调用处理响应的'AuthenticationHandlerBlock'。 – tim
如果您不希望它公开,则不必将其放在标题中。您可以在.m文件顶部的类别中声明它。您只需要将该类别复制到您的测试课程中,以避免警告。 –