2

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

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

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

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

4

2 回答 2

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

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

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

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

    此外,Feathers 在第 14 页总结:

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

    其他类型的测试通常伪装成单元测试。如果满足以下条件,则测试不是单元测试:

    1. 它与数据库对话。
    2. 它通过网络进行通信。
    3. 它涉及文件系统。
    4. 你必须对你的环境做一些特殊的事情(比如编辑配置文件)来运行它。
于 2012-04-09T23:05:04.920 回答
1

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

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

于 2012-04-09T23:05:44.887 回答