代码之家  ›  专栏  ›  技术社区  ›  mafu

公共.NET接口和重载的符合规则实现的通用UnitTest?

  •  2
  • mafu  · 技术社区  · 15 年前

    标题听起来可能有点奇怪。请允许我用一个例子来详细说明。

    这个 Object.Equals 函数通常要求 a.Equals(a) 返回true。除非你在代码中做了一些扭曲的事情,否则每个类都应该遵守这个规则。

    所以我们可以编写一个通用单元测试来检查所有可用的类是否符合。(我们可以排除由某些属性显式标记的类。)

    我们不只是使用equals,而是检查IComparer的所有实现以及您可以想象的任何标准接口的正确行为。

    现在,我的问题是:这已经存在了吗?如果不是,那为什么是个坏主意?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Mark Seemann    15 年前

    我不知道这种东西的存在,但听起来是个好主意。

    这是一个基于对流的测试和静态代码分析的边界——您可以想象这样一个规则是作为自定义代码分析规则编写的,但是作为一个单元测试编写它可能更容易。

    在我们最新的项目中,我们有一些基于约定的测试,这些测试简单地循环遍历给定程序集中的所有类型,并验证它是否符合我们有的约定。可以肯定地想象,用等号法也能做到这一点。

        2
  •  1
  •   mafu    15 年前

    我可以想到这个特性缺失的一个原因:它需要为要测试的每个类创建一个实例。现在,一些类不提供默认的构造函数。可能的解决方案:

    1. 我们只检查具有默认ctor的类。不过看起来还可以,总比什么都没有好。

    2. 我们可以为所有非默认的可构造类实现一个工厂。不确定最好的方法,但我认为有一个可行的解决方案。

    显然,我们可以排除框架提供的所有类,以减少工作量和问题。