我是OCMock的新手并且有一个问题。
我们可以存根一个类的方法,其中通过该类的任何实例/对象调用该方法被模拟
例如:如果Class_A具有非静态function_a而Class_B具有function_b,其在内部声明了Class_A的object_o。
Class_A
{
- function_a
}
Class_B
{
- function_b
{
Obj_o of Class A
[Obj_o a];
}
}
现在,我想为Class_B编写单元测试并测试function_b。
是否有一些机制可以创建Class_A和stub function_b的模拟,然后运行test function_b并确保function_b被存根。
我知道如果我更改function_b的函数定义以将object_o作为参数发送,它就可以工作。我们为function_A创建一个对象mock,为function_b创建stub,并将该对象mock作为参数发送到function_b,因为它获取了模拟对象的引用。但我想检查一下在不改变功能定义的情况下测试这些功能的可行性。 OCMock是否提供此类功能。
答案 0 :(得分:2)
如果您不想更改现有方法定义但可以更改现有代码,则可以使用此方法:
要在Obj_o of Class A
中创建function_b
,请在Class_A
上使用类方法,例如newInstance
。此方法不需要执行除正常[[Class_A] alloc] init];
之外的任何操作(如果您有自定义方法,请更改为init方法)。在您的测试中,您可以模拟此newInstance
函数来返回Class_B
的模拟对象的实例。
请参阅OCMock的文档,9.3 Stubbing methods that create objects。
答案 1 :(得分:1)
应该可以采用以下方法:
alloc
方法
存根中的那就是说,我建议重新构建你的代码以避免所有这些诡计。