1

背景:我有一堆单元测试.NET需要设置一些配置数据才能运行。最初,我使用TestInitializeandTestCleanup来设置和拆除每个测试周围的配置数据;但是,对于整个测试套件来说,一个设置就足够了,所以我更喜欢使用ClassInitializeandClassCleanup来代替。

问题:当我将属性从TestInitializeto更改ClassInitialize并运行测试时,我收到以下错误:

MyTestClass.ClassInit 的签名错误。该方法应标记为静态。

这个属性背后的设计原因是什么要求它的方法是静态的?我所有的测试方法都是实例方法,所以我假设我的测试类至少有一个实例被创建在某个地方以便运行它们。为什么那个实例以后不负责清理?

我确实检查了MSDN,他们没有明确提到静态要求,尽管他们确实有一个很好的例子来说明它的用法。

4

1 回答 1

2

正如 MSDN 所说的ClassInitializeAttribute

标识一个方法,该方法包含在测试类中的任何测试运行之前必须使用的代码,并分配测试类使用的资源。这个类不能被继承。

我可以想到的一个例子是,当您的类中有一个静态字段时,实例的构造函数依赖于该字段。

class foo
{
  static someObject bar;
  int foobar;

  public foo()
  {
    this.foobar = foo.bar.SomeMethod()
  }
}

这样,在您的ClassInitializeAttribute方法中,您可以为静态bar对象分配一个值,这将影响以后创建的所有实例。

您可能想要使用的另一种情况ClassInitializeAttribute是分配测试可能使用的全局对象(例如模拟数据库等)

于 2013-10-01T06:03:47.860 回答