我是OCMock的新手,所以我可能忽略了一些简单的事情,但我的问题是我似乎无法在我创建的模拟上存储方法class
。以下是我如何设置测试的一部分:
// Unit Test
id mock = [OCMockObject mockForClass:[MySubClass class]];
[[[mock stub] andReturn:[MySubClass class]] class];
...
[someObject someMethodWithParam:mock];
...
以下是我someMethodWithParam:
的实现:
// Implementation
- (void)someMethodWithParam:(MySuperClass *)param {
[[param class] someClassMethod];
}
问题在于[param class]
返回OCClassMockObject
而不是MySubClass
。当调用someClassMethod
时,这会导致“无法识别的选择器发送到类”错误。我尝试使用部分模拟,但这似乎没有帮助。
编辑:
这是一个不会通过的简化测试:
// Unit Test
id mock = [OCMockObject mockForClass:[MySubClass class]];
[[[mock stub] andReturn:[MySubClass class]] class];
XCTAssertEqual([mock class], [MySubClass class], @"The mock's class should be MySubClass");
答案 0 :(得分:0)
看看你的-someMethodWithParam:
。它不会返回任何东西。这是无效的。所以这是对这种方法的错误测试。即使方法无法返回任何内容,你做了模拟必须返回的东西。
此测试应如下所示:
MyClass object = [MyClass new]; /// instance of class which has someMethodWithParam: method
id mock = [OCMockObject partialMockForObject:object];
[[mock expect] someClassMethod];
[mock someMethodWithParam:[OCMArg any]];
[mock verify];
在这种方法中,只有你可以测试的期望。您可以测试方法中的方法是否已被调用。因此,您可以测试调用-someMethodWithParam
方法-someClassMethod
时是否已调用。就这样。而你必须创建部分模拟。