【问题标题】:Automatic generation of Unit test cases for .NET and Java [closed]为.NET和Java自动生成单元测试用例[关闭]
【发布时间】:2009-03-27 09:42:23
【问题描述】:

如果给定一个 .NET 或 Java 项目,是否有生成单元测试用例的好工具,它会生成几乎 100% 代码覆盖率的单元测试用例。测试用例的数量可能与代码的圈复杂度成正比(循环和条件的嵌套越高圈复杂度越高),圈复杂度越高,生成的测试用例集就越多。我不希望它功能齐全(比如我将构建单元测试并在生成后运行它),但我会说它可以在您要修改的测试用例中具有模板样式适合您预期需求的案例。但它也应该有一个正确的设置和拆卸方法,并且足以检测是否应该使用模拟对象进行单元测试,如果有任何依赖关系。那么,有没有这样的工具存在呢?

【问题讨论】:

    标签: c# java .net unit-testing cyclomatic-complexity


    【解决方案1】:

    对于 .NET,Microsoft 拥有 Pex,它有望与 Code Contracts 一起成为 .NET 4.0 的主流。我强烈推荐观看第 9 频道的视频。

    让我感到震惊的是,这种东西对于数据驱动的类(解析器等)非常有用。我看不出我经常开始用它,但是很有用仍然可以在您的军械库中使用的工具。

    【讨论】:

    • 我能说什么,马克?要么你得到它,要么你没有......;)
    • 从它“开始”:Pex 测试更像是可执行规范。考虑示例输入确实是一项无聊的工作,软件可以更好地处理......它知道开发人员试图忽略的所有极端情况;)
    • @Kurt:我认为这对于发现边缘/失败案例肯定是有意义的。我想我通常会从手写的“成功”案例开始。也许我只需要在愤怒中使用 Pex 来充分欣赏它。
    【解决方案2】:

    对于 C#(或一般的 .NET),PEX 可能是那个工具。它在 IL 级别工作,并试图强行进入每个分支。它成功地发现了广泛的错误(在 BCL 等中)。

    【讨论】:

      【解决方案3】:

      虽然这似乎违反直觉,但您可能也对随机测试生成框架感兴趣。研究证明,与您所建议的基于覆盖率的系统方法相比,它在发现错误方面同样有效。

      查看 .NET 和 Java 的 Randoop。它通过生成或多或少随机的方法调用序列来工作,并检查合同、崩溃等。它是全自动的。

      您可能还想查看基于QuickCheck 的其他一些随机测试工具,例如适用于 Java、Scala、F#。更类似于 Pex,即您给出一个规范或参数化单元测试,该工具会检查它是否有许多生成的输入参数。

      我发现这种“参数化”编写单元测试的方式实际上在至少 60% 的情况下更加自然,并且会发现更多错误。

      【讨论】:

      【解决方案4】:

      对于 Java,您可以查看EvoSuite,它是开源的并且目前处于活动状态(免责声明,我是它的贡献者之一)。另请参阅相关的question 以获取更多工具列表。

      【讨论】:

        【解决方案5】:

        对于 Java,请尝试 JUnit-Tools。它有自己的 eclipse 插件以及良好的文档。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-10
          • 1970-01-01
          • 2012-01-03
          • 2016-06-06
          • 2023-01-21
          • 2010-09-07
          • 2010-10-04
          • 1970-01-01
          相关资源
          最近更新 更多