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)