何时使用TestFixtureSetUp属性而不是默认的构造函数?
 NUnit文档不告诉我何时使用带有TestFixtureSetup的方法以及何时在构造函数中进行设置。 
 public class MyTest { private MyClass myClass; public MyTest() { myClass = new MyClass(); } [TestFixtureSetUp] public void Init() { myClass = new MyClass(); } } 
 有没有关于TestFixtureSetup与默认构造函数有什么好的/坏的做法或没有任何区别? 
我认为这是nUnit团队尚未解决的问题之一。 但是,有一个出色的xUnit项目看到了这个问题,并决定构造函数在testing夹具初始化中使用是一件好事。
 对于nunit,在这种情况下,我最好的做法是使用文档中描述的TestFixtureSetUp , TestFixtureTearDown , SetUp和TearDown方法。 
我认为这也可以帮助我,当我不考虑nUnittesting夹具作为一个普通的类,即使你正在定义它的构造。 我把它们看作是固定装置,这让我头痛不已,让我忽略了这个问题。
为什么你需要在testing类中使用构造函数?
 在每次testing之前和之后,我使用[SetUp]和[TearDown]标记的方法来执行代码,类似地[TestFixtureSetUp]和[TestFixtureTearDown]标记的方法仅用于在夹具的所有testing之前和之后执行一次的代码跑。 
 我想你可能可以用[TestFixtureSetUp]replace构造函数(尽pipe我还没有尝试过),但是这似乎只是标记方法提供的明确约定。 
 你可以在构造函数中做的[TestFixtureSetup]不能做的一件事是从[TestFixture]接收参数。 
如果你想参数化你的testing夹具,那么你将不得不使用至less一些设置的构造函数。 到目前为止,我只用它来进行集成testing,例如用于testing具有多个数据提供者的数据访问层:
 [TestFixture("System.Data.SqlClient", "Server=(local)\\SQLEXPRESS;Initial Catalog=MyTestDatabase;Integrated Security=True;Pooling=False"))] [TestFixture("System.Data.SQLite", "Data Source=MyTestDatabase.s3db")])] internal class MyDataAccessLayerIntegrationTests { MyDataAccessLayerIntegrationTests( string dataProvider, string connectionString) { ... } } 
 我常常想知道[TestFixtureSetUp]是什么,因为有一个简单的,很好理解的第一类语言构造完全一样的东西。 
我的首选是使用构造函数,以利用readonly关键字确保成员variables不能重新初始化。
 构造函数和用[TestFixtureSetUp]属性标记的方法是有区别的。 根据NUnit文档: 
build议构造函数没有任何副作用,因为NUnit可以在会话过程中多次构build对象。
 所以如果你有任何昂贵的初始化,最好使用TestFixtureSetUp 。 
我想我有一个好的答案 – 使用构造函数而不是属性的原因是当你在testing类之间有一个inheritance关系时。
 只有一个用[TestFixtureSetup]注解的方法将被调用(仅在具体类上),但是其他的fixture初始化器不会。 在这种情况下,我宁愿把初始化放在构造函数中,这个构造函数有一个明确定义的inheritance的语义:) 
  [TestFixtureSetUp]和[TestFixtureTearDown]用于整个testing类。 只运行一次。 
 每个testing方法(testing)都有[SetUp]和[TearDown] 。 为每个testing运行。 
构造函数和TestFixtureSetUp之间的一个重要区别是,至less在NUnit 2中,构造函数代码实际上是在testing枚举上执行的,而不仅仅是testing运行,所以基本上你想限制ctor代码只填充只读参数值。 任何导致副作用或做任何实际工作的事情都需要包装在Lazy中,或者在TestFixtureSetUp / OneTimeSetUp中完成。 所以,你可以把构造函数想象成只是一个configurationtesting的地方。 而TestFixtureSetUp是testing夹具(testing前系统所需的初始状态)运行的地方,而初始化的则是TestFixtureSetUp。
 构造函数和SetUp方法的使用方式不同: 
 构造函数只运行一次。 
 但是,在执行每个testing用例之前, SetUp方法会运行多次。