【问题标题】:assistance with classifying tests协助对测试进行分类
【发布时间】:2012-04-22 05:45:55
【问题描述】:

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

  1. 我的缓存提供程序类是我的分布式缓存 - AppFabric 的抽象层。因此,要测试我的缓存提供程序类的各个方面,例如添加到 appfabric 缓存、从缓存中删除等,涉及到与 appfabric 的通信。因此,测试这些的测试,它们仍然归类为单元测试还是集成测试?

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

我的测试设置方式我想将所有单元测试、集成测试等一起包括在内,因此我提出了这些问题,希望能提供意见。

【问题讨论】:

  • 单元测试顾名思义——测试应用程序的一个单元,例如一个类。第二个问题与单元测试无关,您应该为此使用分析器。

标签: c# .net unit-testing tdd integration-testing


【解决方案1】:
  1. 这些可能被认为是集成测试,因为您不是单独测试代码,而是至少两个不同类别的生产代码的集成。如果您让 AppFabric 的类实现接口,然后使用实现接口的存根和/或模拟测试您的缓存提供程序类,那么这将被视为单元测试。

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

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

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

    此外,Feathers 在第 14 页总结:

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

    其他类型的测试经常伪装成单元测试。测试不是 单元测试如果:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的反馈。当你说分析器是要走的路时,你是什么意思?
    • 一种性能分析器工具,市场上有很多,我有机会使用过这个:red-gate.com/products/dotnet-development/… 确实很有帮助,但我不确定是否有更好的选择
    • 嗯,好的,知道了。与测试分开的分析器。这看起来是一个有用的工具,我可能会考虑将它与一些集成测试一起使用。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 2010-10-23
    • 2017-12-25
    • 1970-01-01
    • 2014-12-23
    • 2020-05-07
    相关资源
    最近更新 更多