2012-04-09 71 views
2

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

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

  2. 上述方法,我因与AppFabric的互动测试,我想时间这样的方法。如果它们比指定的基准测试时间更长,则测试失败。我再次问这个问题,这个性能基准测试可以分类为单元测试吗?

我有我的测试设置我想包括所有的单元测试结合的方式,集成测试等一起,所以我提出这些问题,我将不胜感激输入。

+0

单元测试就是名字所暗示的 - 测试你应用程序的一个单元,例如一个类。第二个问题与单元测试没有任何关系,你应该使用分析器。 – MarioDS 2012-04-09 21:44:29

回答

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

  2. 迈克尔羽毛定义1/10秒或更长时间太慢了在他的书Working Effectively With Legacy Code,第13页。一个单元测试虽然它可能在技术上为一个单元测试来实现,你可能会想要运行这些测试集成测试也需要更长的时间来执行。

    原因是,如果您有数千次测试(比如10,000次),并且每次测试时间为1/10秒,那么您大约需要17分钟才能运行测试。如果每次提交最新更改(以便在发生某些事情时获得快速反馈),都可以运行测试,那可能太长。这并不意味着你不应该写较慢的单元测试,你可能需要它们,但这意味着你不会像随着项目的增长一样频繁地运行它们。

    我也不会让他们失败,如果他们需要很长的时间,他们的时间可能会因运行而有所不同。如果它们通常较慢,则将它们与集成测试进行分组。

    此外,羽毛总结第14页:

    单元测试跑得快。如果他们跑得不快,他们不是单元测试。

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

    1. 它与数据库进行通信。
    2. 它通过网络进行通信。
    3. 它触及文件系统。
    4. 你必须对你的环境做特殊的事情(比如编辑配置文件)来运行它。
1
,如果你要依赖于其他类/组件然后它不能是单元测试

,如果正在测试与系统的其他部分整合类。

我不会建议用这种方式测试性能,因为对同一代码进行的相同测试会因外部因素而失败或取得成功。 Profiler是要走的道路IMO

+0

感谢您的反馈。当你说探查者是要走的路,你是什么意思? – amateur 2012-04-09 23:49:03

+0

性能分析器工具,市场上有很多,我有机会使用这一个:http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/它是真的很有帮助,但我不确定是否有更好的选择 – jorgehmv 2012-04-10 13:37:52

+0

啊好的,得到了​​你。来自测试的单独分析器。这看起来是一个有用的工具,我可能会考虑在一些集成测试中使用它。谢谢。 – amateur 2012-04-10 22:28:03