[英]Why does the ClassCleanup Attribute need to be on a static method?
背景:我在.NET
中有一堆单元测试,需要设置一些配置数据才能运行。 最初,我使用TestInitialize
和TestCleanup
来设置和拆除每个测试周围的配置数据; 但是,对于整个测试套件来说,单个设置就足够了,所以我宁愿使用ClassInitialize
和ClassCleanup
。
问题:当我将属性从TestInitialize
更改为ClassInitialize
并运行测试时,我收到以下错误:
MyTestClass.ClassInit有错误的签名。 该方法应标记为静态。
这个属性背后的设计原因是什么,要求它的方法是静态的? 我的所有测试方法都是实例方法,所以我假设我的测试类至少有一个实例是在某处创建的,以便运行它们。 为什么那个实例后来不负责清理呢?
我确实检查了MSDN ,他们没有明确提到静态要求,尽管他们确实有一个很好的例子。
由于MSDN声明了ClassInitializeAttribute
标识一种方法,该方法包含在测试类中的任何测试运行之前必须使用的代码,并分配要由测试类使用的资源。 这个类不能被继承。
我可以考虑的一个例子就是当你的类中有一个静态字段时,实例的构造函数依赖于它。
class foo
{
static someObject bar;
int foobar;
public foo()
{
this.foobar = foo.bar.SomeMethod()
}
}
这样,在ClassInitializeAttribute
方法中,您可以为静态bar
对象赋值,这将影响稍后创建的所有实例。
您可能希望使用ClassInitializeAttribute
另一种情况是分配测试可能使用的全局对象(例如模拟数据库等)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.