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

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

-(void)calculateSI
{
float Result= PXnXr/100;
}

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

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

  2. 如何测试Result=100?

【问题讨论】:

  • 要测试calculateSI的结果,您需要返回结果。

标签: iphone objective-c void ocmock


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多