Ios 存根法;“类”;与奥克莫克

Ios 存根法;“类”;与奥克莫克,ios,iphone,objective-c,ocmock,Ios,Iphone,Objective C,Ocmock,我是OCMock的新手,所以我可能忽略了一些简单的东西,但我的问题是,我似乎无法在我创建的mock上存根方法类。以下是我如何设置部分测试: // Unit Test id mock = [OCMockObject mockForClass:[MySubClass class]]; [[[mock stub] andReturn:[MySubClass class]] class]; ... [someObject someMethodWithParam:mock]; ... 下面是我对som

我是OCMock的新手,所以我可能忽略了一些简单的东西,但我的问题是,我似乎无法在我创建的mock上存根方法
。以下是我如何设置部分测试:

//  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");

查看您的
-someMethodWithParam:
。它不会返回任何东西。它是空的。所以这是一个错误的测试方法。您制作了mock,它必须返回一些东西,即使方法不能返回任何东西。 此测试应如下所示:

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
时是否已被调用。这就是全部。您必须创建部分mock。

OCMockObject+mockForClass:在这里也可以使用,以避免您在测试不需要时创建对象实例。