背景:我有一堆单元测试,.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
是分配测试可能使用的全局对象(例如模拟数据库等)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句