使用OCMockito模拟无效的方法

时间:2015-03-13 22:45:32

标签: ios tdd ocmockito ochamcrest

在使用OCMockito时,以下功能很棒:

DSAPIManager *mockAPIManager = mock([DSAPIManager class]);
[given([mockAPIManager initWithBaseURL:[mockAPIManager baseURL]]) willReturn:[DSAPIManager sharedAPIManager]];

但是当我在一个有多个参数的方法上尝试相同的事情时(参见下面的代码),我得到一个"参数类型' void'不完整'编译错误。

DSAPIManager *mockAPIManager = mock([DSAPIManager class]);
[given([mockAPIManager setLoginCredentialsWithEmail:@""
                                           password:@""]) willReturn:@""];

有谁知道正确的方法吗?

修改

我最初提出这个问题的意图是解决在我尝试以下操作时出现编译器错误的问题:

[given([mockAPIManager setLoginCredentialsWithEmail:@"" password:@""]) willDo:^id(NSInvocation *invocation) {
        // Mock implementation goes here
}];

我尝试模拟的方法的方法签名是:

- (void)setLoginCredentialsWithEmail:(NSString *)email password:(NSString *)password;

我实际上要做的是模拟void方法的实现。 (给定void方法,用块模拟方法的实现。为了我的目的,该方法返回一个完成块,它接受两个参数。我想构造这两个参数然后运行完成在被模拟的实现块中阻塞。)

2 个答案:

答案 0 :(得分:3)

现在您可以像这样使用givenVoid

[givenVoid([mockAPIManager setLoginCredentialsWithEmail:@"" password:@""]) willDo:^id(NSInvocation *invocation) {
        // Mock implementation goes here
}];

答案 1 :(得分:2)

OCMockito还没有支持虚空方法的存根。这是因为在willThrow:willDo:出现之前,没有必要。它很快就会被添加为一项功能。您可以在https://github.com/jonreid/OCMockito/pull/93

中跟踪进度