协助对测试进行分类

本文关键字:分类 测试 | 更新日期: 2023-09-27 18:30:45

我有一个我创建的.net c#库,我目前正在为其创建一些单元测试。我目前正在为我创建的缓存提供程序类编写单元测试。作为编写单元测试的新手,我有 2 个问题,它们是:

  1. 我的缓存提供程序类是分布式缓存 AppFabric 的抽象层。因此,要测试我的缓存提供程序类的各个方面,例如添加到appfabric缓存,从缓存中删除等,需要与appfabric进行通信。因此,要测试此类测试的测试是否仍被归类为单元测试或集成测试?

  2. 由于与appfabric的交互,我正在测试上述方法,我想对此类方法进行计时。如果测试花费的时间超过指定的基准,则测试失败。我再次问一个问题,这个性能基准测试可以归类为单元测试吗?

我设置测试

的方式我想将所有单元测试一起包含在一起,集成测试一起等,因此我问这些问题,我将不胜感激。

协助对测试进行分类

  1. 这些可能被视为集成测试,因为您不是孤立地测试代码,而是集成至少两个不同类别的生产代码。如果让 AppFabric 的类实现接口,然后使用包含接口的存根和/或模拟来测试缓存提供程序类,则这将被视为单元测试。

  2. Michael Feathers在他的《Effective Working With Legacy Code》一书第13页中将1/10秒或更长定义为对于单元测试来说太慢了。虽然它在技术上可能作为单元测试实现,但您可能希望使用集成测试运行这些测试,这也往往需要更长的时间来执行。

    原因是,如果您有数千个测试(例如 10,000 个),并且每个测试每秒需要 1/10,那么您运行它们大约需要 17 分钟。如果每次提交最新更改时都运行测试(以便在破坏某些更改时快速获得反馈),则可能太长了。这并不意味着你不应该编写较慢的单元测试,你可能需要它们,但这只是意味着你不希望随着项目的增长而运行它们的频率与更快的单元测试一样频繁。

    如果他们需要很长时间,我也不会让他们失败,因为他们的时间可能会在某种程度上因运行而异。如果它们通常较慢,请将它们与集成测试分组。

    此外,Feathers在第14页总结道:

    单元测试运行速度很快。如果它们运行速度不快,则它们不是单元测试。

    其他类型的测试通常伪装成单元测试。测试不是 如果出现以下情况,则进行单元测试:

    1. 它与数据库对话。
    2. 它通过网络进行通信。
    3. 它涉及文件系统。
    4. 您必须对环境执行特殊操作(例如编辑配置文件)才能运行它。

如果你必须依赖其他类/组件,那么它就不能是单元测试,你正在测试与系统其他部分的类集成。

我不建议以这种方式测试性能,因为针对相同代码的相同测试会失败或成功,具体取决于外部因素。剖析器是 IMO 的必经之路