Automated tests 代码覆盖率通用函数/参数?

Automated tests 代码覆盖率通用函数/参数?,automated-tests,code-coverage,generics,Automated Tests,Code Coverage,Generics,我正在为我的应用程序编写一些代码。现在,我知道代码覆盖率是一个与您创建的测试类型和您希望进行代码覆盖的语言相关联的活动 我的问题是:有没有任何可能的方法来覆盖一些通用代码?例如,我们是否可以拥有一组功能/测试用例,这些功能/测试用例可以运行(以及针对被测应用程序的更多特定测试),以获得代码覆盖率,比如10%或更多的代码 更像是,如果我希望构建一个代码覆盖的框架,那么最好的方法是什么?是否有可能实现某些功能的自动化或通用化?这通常是通过将静态代码分析(Coverity、Klockwork或其免费类

我正在为我的应用程序编写一些代码。现在,我知道代码覆盖率是一个与您创建的测试类型和您希望进行代码覆盖的语言相关联的活动

我的问题是:有没有任何可能的方法来覆盖一些通用代码?例如,我们是否可以拥有一组功能/测试用例,这些功能/测试用例可以运行(以及针对被测应用程序的更多特定测试),以获得代码覆盖率,比如10%或更多的代码


更像是,如果我希望构建一个代码覆盖的框架,那么最好的方法是什么?是否有可能实现某些功能的自动化或通用化?

这通常是通过将静态代码分析(Coverity、Klockwork或其免费类似物)与动态分析相结合,通过对插入指令的应用程序(探查器+内存检查器)运行测试来实现的。不幸的是,这很难自动化测试算法,大多数工具都是一种“记录器”,能够记录流量/密钥/信号-取决于域并重放它们(具有最小的更改/替换,如会话ID/用户/etc)

这通常是通过结合静态代码分析(Coverity、Klockwork或其免费类似物)来实现的通过对插入指令的应用程序(探查器+内存检查器)运行测试进行动态分析。不幸的是,这很难实现测试算法的自动化,大多数工具都是一种“记录器”,能够记录流量/密钥/信号-取决于域并重放它们(只需最少的更改/替换,如会话ID/用户/等)

出于以下原因,我不确定通用覆盖工具是否是圣杯:

  • 覆盖率不是目标,而是工具。它告诉您代码的哪些部分没有完全被测试击中。它没有说明测试有多好
  • 生成的测试无法猜测代码的语义。为您生成测试的框架只能从阅读代码中推断出意义,这在本质上可能是错误的,因为单元测试的全部目的是查看代码的行为是否也符合您的预期
  • 因为自动化框架将生成人工覆盖,所以您永远无法判断一段代码是用适当的单元测试测试的,还是表面上由框架测试的。我宁愿让未经测试的代码显示为未被发现,所以我修复了它
  • 您可以做的(我已经做了;-)是编写一个测试JavaBean的通用测试。通过反射,您可以根据Java bean的Sun规范测试Java bean。断言equals和hashcode都已实现(或者两者都未实现),查看getter是否实际返回您使用setter推入的值,检查所有属性是否都有getter和setter

    例如,对于实现“可比较”的任何东西,都可以使用相同的基本技巧

    这很容易做到,易于维护,并迫使你拥有干净的豆子。至于其余的单元测试,我试着把重点放在先对重要的部分进行测试上,并且经过深思熟虑


    覆盖范围会给人一种虚假的安全感。常识不能自动实现。

    我不确定通用覆盖工具是否是圣杯,原因有两个:

  • 覆盖率不是目标,而是工具。它告诉您代码的哪些部分没有完全被测试击中。它没有说明测试有多好
  • 生成的测试无法猜测代码的语义。为您生成测试的框架只能从阅读代码中推断出意义,这在本质上可能是错误的,因为单元测试的全部目的是查看代码的行为是否也符合您的预期
  • 因为自动化框架将生成人工覆盖,所以您永远无法判断一段代码是用适当的单元测试测试的,还是表面上由框架测试的。我宁愿让未经测试的代码显示为未被发现,所以我修复了它
  • 您可以做的(我已经做了;-)是编写一个测试JavaBean的通用测试。通过反射,您可以根据Java bean的Sun规范测试Java bean。断言equals和hashcode都已实现(或者两者都未实现),查看getter是否实际返回您使用setter推入的值,检查所有属性是否都有getter和setter

    例如,对于实现“可比较”的任何东西,都可以使用相同的基本技巧

    这很容易做到,易于维护,并迫使你拥有干净的豆子。至于其余的单元测试,我试着把重点放在先对重要的部分进行测试上,并且经过深思熟虑

    覆盖范围会给人一种虚假的安全感。常识是不能自动化的