问题 自动生成单元 - 测试遗留Java代码


用于自动生成Java单元测试的最佳,最好是免费/开源工具是什么?我知道,单元测试实际上不能用于记录和驱动系统设计的普通TDD单元测试。但是,如果您拥有庞大的遗留代码库并想知道您需要进行的更改是否会产生不必要的,模糊的副作用,则自动生成的单元测试会非常有用。


10772
2017-09-17 08:35


起源



答案:


不是免费的。不是开源。但我找到了AgitarOne搅拌器(http://www.agitar.com/solutions/products/agitarone.html)真的很适合自动生成单元测试并寻找不必要的模糊副作用


4
2017-09-17 09:37



我很想看到像Agitar这样的开源实现 - 这是开源应该真正有用的东西。 - Vihung


答案:


不是免费的。不是开源。但我找到了AgitarOne搅拌器(http://www.agitar.com/solutions/products/agitarone.html)真的很适合自动生成单元测试并寻找不必要的模糊副作用


4
2017-09-17 09:37



我很想看到像Agitar这样的开源实现 - 这是开源应该真正有用的东西。 - Vihung


说实话,我可能不会这样做。单元测试是孤立的,你实际上不会知道你是否有“不必要的,模糊的副作用”,因为所有东西都会与引起副作用的其他东西隔离开来。因此,您需要集成或系统测试  不是你可以自动化的东西。

构建一些高级的端到端系统测试,这些测试可以给你一定程度的信心,然后使用覆盖测试来找出你错过的东西,缺点是当bug出现时,将更难指出他们确切的原因,但好处是,你将更有可能看到这些错误。

找到错误后,只为它们编写单元测试。随着您的前进,您可以将TDD用于要重构的位。

我知道这可能不是你想听到的答案,但我已经测试了很多年,这是一个坚实的方法(虽然我很难称之为唯一的方法:)


3
2017-09-17 08:43



作为这种方法的补充,我建议阅读 objectmentor.com/resources/articles/... (警告PDF)和这 www-128.ibm.com/developerworks/java/library/j-legacytest.html  我不认为你真的想自动生成测试 - Jean


这很有趣,但是这样 生成的单元测试实际上是有用的。 如果您正在处理遗留应用程序,则通常很难编写正确的,最先进的单元测试。

这样生成的测试(如果你有办法生成它们的话)可以确保代码的行为在你的更改期间保持不变,这可以帮助你 重构代码并编写更好的测试

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

其次,你可以手工编写“大”测试。当然,这些不是单元测试 本身 (没有隔离,潜在的副作用等),但可能是良好的第一步。特别是如果你没有时间和遗留应用程序。

奖金提示! 有一本很好的书“使用遗留代码有效地工作”和Java中的示例,包括在这种情况下使用的技术。不幸的是,你必须手动做一些事情,但无论如何你都必须在某个步骤做到这一点。


3
2018-02-27 01:06





Eclipse的Coview插件(http://www.codign.com/products.html)看起来就像是工作。我有兴趣生成涵盖代码中所有路径的测试,而这似乎就是这样做的。它还会产生嘲笑,这样可以节省大量的时间。


3