2011-03-15 100 views
1

我有两个[TestMethods]。 MethodA的结果需要是MethodB的输入。问题是,当新的测试方法启动时,所有的值和变量都会被重置。VS 2010:将TestMethod的结果传递给另一个Testmethod

有人已经问过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(...); 
} 

我明白,这不是测试“官方”的方式,但我确实需要为这种情况的实际解决方案 - 所以我希望某种解决方法。

任何想法?

回答

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成立客户:

(该TestFixtureSetUp的名称可能会在VS测试环境的不同,这就是它被称为在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(); 
} 

第一种方案是在我的每一个测试用例的意见更好负责创建自己的数据,但如果这是它实际上是把东西进出数据库的集成测试,然后它是确定(再次在我看来)有数据所有测试都需要在该类的设置中完成,然后所有测试都可以运行,以期数据在那里。你应该确保每个测试类都有一个相应的测试拆除,这将从数据库中删除这个类的测试数据,或者你在每个测试类运行之前在某个地方清理数据库(如在一个普通的基类中)

+0

嗨,山姆,谢谢你的帮助。 – Ingmar 2011-03-15 12:30:26

+0

Sh ...命中意外返回;-)好吧,这个想法是在测试运行中创建一个新客户,然后再次在完全相同的测试运行中删除同一个客户。所以,最后,如果一切都完成了,那么在每次测试之后数据库都会再次变空。 – Ingmar 2011-03-15 12:34:53

+0

@Ingmar,看看我的编辑,你需要确保如果一切都没有解决,数据库被重置为可行状态,以便其他测试不受影响。这可以在TestFixtureSetup中或拆卸下来。我将编辑以包含此信息 – 2011-03-15 12:36:21

1

因为每个[TestMethod]都是独立运行的,所以您需要使用[TestInitialize]方法来创建新客户,这与您的情况一样。