何时在Test中使用模拟与保存的对象

时间:2017-01-25 18:47:04

标签: unit-testing tdd

我有一个函数可以对对象内的信息进行计算(比如myFunctionThatIWantToTest())。我的主要问题是,如果我正在为这个函数编写一个测试,我应该保存一个示例对象来运行计算还是创建一个存根?

我问的原因是函数操作的对象包含一个复杂的大结构,这是更复杂计算的结果,例如:

object = functionA(object)通过创建数字和其他结果的大表来更新对象

result = myFunctionThatIWantToTest(object)使用该大表来获取结果

我是TDD的新手,所以这就是为什么我不确定如何继续。人们做什么?您是保存样本对象还是制作存根。

1 个答案:

答案 0 :(得分:1)

更新 - 根据您最近编辑的问题:使用模拟。如果使用实例,那么测试代码中的断言不仅取决于您正在测试的函数,还取决于functionA正确将对象置于您认为的状态。

原始答案:

纯粹主义者的答案很简单:使用模拟对象。除了您正在测试的代码之外,测试不应该依赖于您的任何代码。

实用主义者的答案有点复杂:你应该使用模拟,特别是如果你有疑问的话。但有时可以使用真实对象实例,如果您可以确定该对象代码中的任何内容都不会影响测试结果。 (当然,如果该对象不会引入一堆其他代码,或者做一些使测试运行时间长的事情等等)。

我使用真实对象的情况是对象只存储数据。零逻辑的getter和setter,没关系;更多,可能更好地使用模拟。如果对象包含其他方法,但测试不使用它们......好吧,它是一个灰色区域,但我倾向于使用模拟。