自动生成遗留Java代码的单元测试

时间:2020-03-05 18:58:17  来源:igfitidea点击:

自动生成Java单元测试的最佳工具(最好是免费/开源工具)是什么?我知道,单元测试不能真正起到与记录和驱动系统设计的普通TDD单元测试相同的作用。但是,如果我们拥有庞大的旧代码库,并且想知道是否需要进行更改,那么自动生成的单元测试可能会很有用。

解决方案

回答

老实说,我可能不会这样做。单元测试是孤立的,我们实际上不会知道自己是否具有"有害的,晦涩的副作用",因为所有内容都与导致副作用的其他因素隔离开来。结果,我们需要集成或者系统测试,而这不是我们可以自动化的。

建立一些高级的,端到端的系统测试,使我们有一定的信心,然后使用覆盖率测试来找出我们遗漏的内容。缺点是,当出现错误时,很难指出找出其确切原因,但好处是我们更有可能看到这些错误。

一旦发现错误,就为它们编写单元测试。继续前进时,可以将TDD用于要重构的位。

我知道这可能不是我们想要听到的答案,但是我已经进行了很多年的测试,这是一种可靠的方法(尽管我很难将其称为唯一的方法:)

回答

不是免费的。不是开源的。但是我发现AgitarOne搅拌器(http://www.agitar.com/solutions/products/agitarone.html)确实非常适合自动生成单元测试并查找有害的晦涩副作用

回答

这很有趣,但是这种生成的单元测试实际上可能是有用的。如果我们使用的是旧版应用程序,通常很难编写正确的最新单元测试。

这样生成的测试(如果我们当然有生成它们的方法)可以确保在更改期间代码的行为保持不变,这可以重构代码并编写更好的测试。

现在,关于生成自身。我不知道任何魔术工具,但是我们可能想搜索有关在Javadocs中包含一些测试方法的JUnit功能。这将允许我们编写一些简单的测试。是的,它实际上具有一定的价值。

其次,我们可以手动编写"大型"测试。当然,这些本身并不是单元测试(没有隔离,潜在的副作用等),但是可能是很好的第一步。尤其是如果时间很少并且有旧版应用程序。

奖金提示!有一本很棒的书"有效地处理遗留代码",其中包括Java实例,其中包括在这种情况下可以使用的技术。不幸的是,我们必须手动执行某些操作,但是无论如何我们都必须在某些步骤上执行该操作。