void 方法的 OCMock 测试

Posted

技术标签:

【中文标题】void 方法的 OCMock 测试【英文标题】:OCMock test for void methods 【发布时间】:2013-05-08 05:54:50 【问题描述】:

我正在为将返回一些值的方法进行 OCMocktest。如何实现 void 方法。例如计算单利的方法。但它不返回任何值。如何检查计算功能?

-(void)calculateSI

float Result= PXnXr/100;

如何使用OCMock检查Result=100?我可以只为具有返回类型的方法实现吗?

    如何测试calculateSI方法是否被调用?

    如何测试Result=100?

【问题讨论】:

要测试calculateSI的结果,您需要返回结果。 【参考方案1】:

1) 如果您想测试是否调用了 calculateSI,您应该模拟该对象。类似的东西:

id calculator = [OCMockObject mockForClass:[SICalculator class]];
systemUnderTest.calculator = calculator

[[calculator expect] calculateSI];

[systemUnderTest calculateSomething];

[calculator verify];

2) 您不能测试局部变量值。您应该将 result 设置为属性或返回。

【讨论】:

“被测系统”(SUT) 是您实际测试的类的通用名称。您说您想测试是否调用了该方法,因此您想测试其他人(SUT)与其依赖项(计算器)之间的交互。例如,您可能想要测试点击视图中的按钮是否会调用计算器。在这种情况下,视图就是 SUT。【参考方案2】:

相反,您可以修改您的方法以将本金金额作为参数并返回计算出的 SI,如下所示。

- (float)calculateSI:(float)inPXnXr

     return inPXnXr/100;

你的测试用例会变成

- (void)test__calculateSI__invokeWith300

     CalculatorViewController *masterVC = [[CalculatorViewController alloc] init];
     float result = [masterVC calculateSI:300.0];
     STAssertTrue(result == 3, @"FAILED");

您不需要为此使用 OCMock,因为您正在测试方法的结果。可以直接调用方法并测试返回值。

【讨论】:

我正在处理客户端代码。所以我无法更改主代码。这就是为什么我想知道 void 方法的引导 OCMock。 我可以联系你吗?请提供否或邮件。我的邮件是 prassan86@gmail.com

以上是关于void 方法的 OCMock 测试的主要内容,如果未能解决你的问题,请参考以下文章

xcode 中的单元测试(使用 GHUnit 和 OCMock)

使用 AFNetworking 和 OCMock 的测试网络

如何使用 OCMock 验证静态方法

OCMock 验证失败

带有中间变量的 OCMock 测试代码

通过 OCMock 存根覆盖方法