标题可能听起来有点奇怪。请允许我详细说明一个例子。
Object.Equals
函数通常要求a.Equals(a)
返回true。除非你在代码中做了一些扭曲的事情,否则每个类都应该遵守这个规则。
因此,我们可以编写一个通用的unittest来检查所有可用的类以符合要求。 (我们可能会排除由某些属性明确标记的类。)
而不仅仅是使用Equals,我们还会检查所有实现的正确行为,例如IComparer和您可以想象的任何标准接口。
现在,我的问题是:这已经存在吗?如果没有,为什么这是一个坏主意?
答案 0 :(得分:1)
我不知道存在这样的事情,但这听起来不错。
这是基于对话的测试和静态代码分析的边界 - 您可以想象这样的规则被编写为自定义代码分析规则,但它可能更容易将其编写为单元测试。
在我们最新的项目中,我们有一些基于约定的测试,它们只是循环遍历给定程序集中的所有类型,并验证它是否符合我们的某些约定。人们可以想象,例如,做同样的事情。等于方法。
答案 1 :(得分:1)
我可以想到缺少此功能的一个原因:需要创建每个要测试的类的实例。现在,某些类不提供默认构造函数。可能的解决方案:
我们只检查具有默认ctor的类。虽然看起来不错,但总比没有好。
我们可以为所有非默认构造类实现工厂。不确定最好的方法,但我认为有一个可行的解决方案。
显然,我们可以排除框架提供的所有类,以减少工作量和问题。