协助分类测试

时间:2012-04-09 21:37:40

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

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

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

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

  3. 我设置测试的方式我希望将所有单元测试结合在一起,集成测试等等,因此我会问这些问题,我会很感激输入。

2 个答案:

答案 0 :(得分:2)

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

    < / LI>
  2. Michael Feathers在他的书Working Effectively With Legacy Code,第13页中定义了1/10秒或更长的单位测试速度太慢了。虽然它可能在技术上被实现为单元测试,但你很可能想要使用集成测试运行这些测试,这也往往需要更长的时间来执行。

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

    如果他们花很长时间,我也不会让他们失败,因为他们的时间可能会在不同的运行中发生变化。如果它们通常较慢,请使用集成测试对它们进行分组。

    此外,Feathers总结于第14页:

      

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

         

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

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

答案 1 :(得分:1)

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

我不建议以这种方式测试性能,因为针对相同代码的相同测试将失败或取决于外部因素。分析器是IMO的方式