我应该测试公共类函数,它只改变对象的内部状态吗?

时间:2010-07-07 08:52:12

标签: objective-c unit-testing

我决定将单元测试添加到现有项目中(非常大)。 我正在使用“google toolbox for mac”用于各种类型的STAssert ...和OCMock框架。

但我认为我测试错了。例如,我有公共函数 saveData ,它不会返回任何内容,只会更改对象的内部状态。我应该测试一下吗?由于封装原则 - 我不必担心对象实现,我不能依赖私有变量(因为它们可以在将来更改/删除)

@implementation Foo
-(void) saveData {
 internalData_ = 88;
}

在实际项目中,这个函数saveData是100行,它改变了很多类的私有变量。

那么,我应该测试一下吗?我之前有一些单元测试的经验,不能自己决定。

1 个答案:

答案 0 :(得分:3)

更改的内部状态是否会影响该对象的后续调用?如果是这样,您应该将其包含在像

这样的单元测试中
  • 测试a()
  • 执行saveData()
  • 再次测试a()

即使没有,也可以对它进行单元测试。不是用于确定其他代码是否会因使用此方法而中断,而是用于自动测试方法的正确实现。即使该方法没有返回任何东西,它可能仍然有某种契约(“如果我称之为,这必须发生”)并且您应该检查是否应该发生了什么,发生了(例如,在日志中添加了一行文件或其他东西)。

现在,如何检查方法是否返回任何内容,完全是另一个问题。具有讽刺意味的是,这是单元测试的实现细节