2010-10-06 89 views
1

有没有任何自动化工具在编写单元测试时发现类依赖关系?单元测试:找到类依赖关系

一个例子来说明我的意思:

我们想要写一个类ToBeTested单元测试。所以我会写一些测试来验证班级的预期行为。现在我仍然不知道是否有类的依赖,因为ToBeTested可能会使用很多其他类。这一点很重要,因为我们希望打破这些依赖关系,或者至少确保它们是安全的(已经测试过)。

找到依赖关系的最佳方法到目前为止,我发现使用了eclemma,它给了我一个包含测试期间运行的代码的类的列表。

但知道我手动输入这些类,有没有更容易/自动化的方式来获得这些类,甚至在我的Java程序中使用此列表。

编辑:对不起,我正在使用eclipse和java。

回答

5

由于单元测试(几乎总是)白盒测试,您可以简单地查看正在测试的类的源代码以查看其依赖关系。

通过一些自动化工具产生依赖关系的清单听起来在理论上很好,但在我的经验,这将帮助不大反正 - 你需要通过一个经过依赖一个,确定哪些是真正的,从当前测试的角度来看很重要,然后设置/嘲笑它们适合您的单元测试。这部分不能自动化(我怀疑它会永远)。

为了达到这个目的,最简单和最好的方法是用最简单的明显的测试夹具开始运行测试,即通常为ToBeTested tested = new ToBeTested()。如果成功,我将呼叫添加到对象上所需的方法。如果成功(即运行时没有引发异常),我添加断言。如果(当)这些步骤中的任何一个失败时,我会查看/调试代码以查看错误,并扩展测试夹具以覆盖该错误。

在最好的情况下(TDD在你自己的代码上,正在被新开发),这个过程当然要简单得多,因为这个类从一开始就被设计为可测试的,因此它具有最少的依赖关系,而你已经知道这些。在最糟糕的情况下(为遗留代码编写单元测试),这可能是一个痛苦但有益的探索和可能的重构过程,需要几个小时才能创建第一个工作测试。但接下来会容易得多,第三次之后,我几乎总是开始生产更多的测试,如传送带。

4

是的,一个是JDepend,它分析依赖关系。我们用它来自动检测软件包之间的周期性依赖关系。我不知道检查测试本身的依赖关系是多么容易。

使用JDepend进行单元测试的更多细节在http://www.clarkware.com/software/JDepend.html#junit

还有一个corresponding Eclipse plug-in可视化的依赖关系。

+0

不错,但看起来像这只适用于软件包。我对类更感兴趣 – Skiy 2010-10-06 17:34:10

+0

当前链接https://github.com/clarkware/jdepend/blob/master/docs/JDepend.html – 2017-04-28 08:59:49

相关问题