我有两个[TestMethods]。 MethodA的结果需要是MethodB的输入。问题是当新的测试方法开始时,所有的值和变量都会被重置。
有人已经问过exact same question,但还没有真正的解决方案。
我想要的就是以下工作:
Guid CustomerID;
[TestMethod]
public void CreateCustomer()
{
// Create a new customer and store the customer id
CustomerID = CreateNewCustomer();
Assert.IsNotNull(...);
}
[TestMethod]
public void DeleteCustomer()
{
// Delete the customer created before
var ok = DeleteCustomer(CustomerID);
Assert.IsNotNull(...);
}
我知道这不是测试的“官方”方式,但我真的需要一个实用的解决方案 - 所以我希望有一些解决方法。
有什么想法吗?
答案 0 :(得分:1)
为什么不在删除客户测试中创建客户?
[TestMethod]
public void CreateCustomer()
{
// Create a new customer and store the customer id
var customerID = CreateNewCustomer();
Assert.IsNotNull(...);
}
[TestMethod]
public void DeleteCustomer()
{
// Delete the customer created before
var customerID = CreateNewCustomer();
var ok = DeleteCustomer(customerID);
Assert.IsNotNull(...);
}
或者只是在testfixture设置中创建客户:
(在VS测试环境中,TestFixtureSetUp的名称可能不同,就是在NUnit中调用它,但是会有相同的名称)
private Guid CustomerID;
[TestFixtureSetUp]
{
**EDIT** you could ensure you DB is clean here:
CleanDB();
CustomerID = CreateNewCustomer();
}
[TestMethod]
public void CreateCustomer()
{
// check previously created customer
Assert.IsNotNull(...);
}
[TestMethod]
public void DeleteCustomer()
{
// Delete the customer created before
var ok = DeleteCustomer(CustomerID);
Assert.IsNotNull(...);
}
[TestFixtureTearDown]
{
**EDIT** or you could ensure you DB is clean here:
CleanDB();
}
我认为第一个解决方案更好,因为每个测试都负责创建自己的数据,但是如果这是一个集成测试实际上是将数据输入和输出数据库那么它是可以的(在我看来)获得在该类的设置中完成所有测试所需的数据,然后所有测试都可以运行,期望数据存在。您应该确保每个测试类都有相应的测试拆除,这将从db中删除此类测试数据,或者您在每个测试类运行之前在某处清理DB(如在公共基类中)
答案 1 :(得分:1)
您需要使用[TestInitialize]方法进行测试先决条件,就像创建新客户一样,因为每个[TestMethod]都是独立运行的。