如何测试无法进行单元测试的依赖类?

时间:2009-10-09 11:46:20

标签: unit-testing testing

我有一个关于如何测试彼此之间具有依赖关系的2个类的问题,但不能一起进行单元测试。我无法创建一个足够短的代码示例,所以我将尝试用假设的类来解释它。对不起,如果这太混乱了,但我仍然试图想出一个简洁的例子。

在这个例子中,我们关注4个不同的类:ObjectCreator,ObjectUser1,ObjectUser2和Object。在ObjectUser1和ObjectUser2的单元测试中,每个都显式构造要使用的Object实例。 ObjectCreator还具有单元测试,以确保对象实例的“正确”构造。所有单元测试都成功通过。现在,找到了ObjectUser1中的一个错误,该错误未在单元测试中公开。此错误是由于ObjectCreator如何创建对象与ObjectUser1如何使用它之间不兼容。 ObjectUser2中不存在此错误。修复bug的方法是改变ObjectCreator构造对象的方式。我面临的问题是,当我更改ObjectCreator时,所有单元测试再次通过,但我知道新的更改已经破坏了ObjectUser2(由于Object为单元测试构建的方式,单元测试为ObjectUser2传递)。假设出于复杂性原因,我不想在ObjectUser1和ObjectUser2的单元测试中使用ObjectCreator。

这是单元测试中的常见问题吗?如果不能一起进行单元测试,那么测试依赖关系的最佳方法是什么?任何有关这方面的帮助将不胜感激。

4 个答案:

答案 0 :(得分:2)

测试B类时,Mock A. 所以你将得到你想要的结果A.但是B仍然会依赖它。

您可以根据需要进行单元测试。你保持了你的依赖。

答案 1 :(得分:1)

答案 2 :(得分:1)

看起来你没有从应用程序逻辑中充分拆分依赖逻辑,因为对象A创建了对象B.你想要将其删除所以A有一个引用到某种创建对象B的提供者。

我将采用的路由是使用Dependency Injection将依赖关系构造逻辑与应用程序逻辑分开。但是,切换到DI框架可能是您项目的一项重大任务。您可以使用其他选项,包括一个简单的静态factory method,只要您在方法中添加钩子以强制它返回您需要返回的内容。

一旦两者分离,就是模拟对象B的一个简单例子。

答案 3 :(得分:0)

听起来我觉得你的物体太紧密耦合了,而且可能会被分开。你是否可以以一种难以解耦的方式重用Object,并且可能需要两个独立的对象?