请参阅以下代码:
Guid product1Guid = Guid.NewGuid();
Guid product2Guid = Guid.NewGuid();
Products = new List<Product>();
var product1 = new Product(product1Guid), "Product 1");
var product2 = new Product(product1Guid), "Product 2");
Products.Add(product1);
Products.Add(product2);
我的五种测试方法使用此代码。我在哪里放这个代码?选项包括:
1)OneTimeSetup方法:另一个问题的回答者提出反对意见,因为产品是可变的,并且将来一次测试可能会意外地改变状态,这意味着以下所有测试都会失败。
2)在测试类中创建一个方法 (返回列表):另一个问题的回答者提出建议,因为你不应该存根一个简单的数据对象。
3)将上面的代码放在每个测试方法中。这似乎违反了DRY原则。
4)创建一个Helper类,在测试类的外部(返回列表):我不确定这是否正常。
我意识到上面的所有选项都可行。我试图遵循这里最不惊讶的原则,以便将来查看我的代码的开发人员将知道会发生什么。
答案 0 :(得分:2)
NUnit SetUp属性解决了这个问题。
此属性在TestFixture中用于提供一组通用的 在调用每个测试方法之前执行的函数。
[TestFixture]
public class ExampleTest
{
Guid product1Guid;
Guid product2Guid;
List<Product> Products;
[SetUp]
public void PerTestPrepare()
{
product1Guid = Guid.NewGuid();
product2Guid = Guid.NewGuid();
Products = new List<Product>();
var product1 = new Product(product1Guid), "Product 1");
var product2 = new Product(product1Guid), "Product 2");
Products.Add(product1);
Products.Add(product2);
}
[Test]
public void SimpleCheck_Containts_True()
{
Assert.IsTrue(Products.Any(p => p.Id == product1Guid));
}
}