5

在我的单元测试期间,我正在创建需要在未来的单元测试中引用的数据。例如:

[TestMethod]
public void CreateOrder()
{
    Order order = new Order();
    int orderNumber = order.Create();
    // return orderNumber;
}

[TestMethod]
public void ProcessOrder()
{
    int orderNumber = (int)TestContext.Properties["OrderNumber"];
    ProcessOrder(orderNumber);
}

我需要保存“orderNumber”,以便另一个 UnitTest(可能在另一个代理上)可以使用这个生成的订单。我已经决定我可以使用数据库,但是我必须像队列一样操作它来删除项目,并且不想走那条路。

有没有办法将 orderNumber '返回'回 LoadTest 并将其作为 Context 参数传递给另一个 UnitTest 的调用?

4

1 回答 1

4

您可以通过LoadTest 插件并使用UserContext. 每个虚拟用户都有自己的UserContext,您可以使用它来传递/检索来自TestContext.

  1. 创建负载测试插件
  2. TestStarting在&事件上添加事件处理程序TestFinished。该TestStarting事件将在TestInitialize方法之前和TestFinished之后触发TestCleanup

    public void TestStarting(object sender, TestStartingEventArgs e)
    {
        // Pass the UserContext into the TestContext before the test started with all its data retrieved so far data.
        // At the first test it will just be empty
        e.TestContextProperties.Add("UserContext", e.UserContext);
    }
    
    public void TestFinished(object sender, TestFinishedEventArgs e)
    {
        // do something with the data retrieved form the test 
    }
    
  3. 使用TestInitialize&TestCleanup从/到获取/添加数据UserContext

    [TestInitialize]
    public void TestInitialize()
    {
        // Get the order number which was added by the TestCleanup method of the previous test
        int orderNumber = (int) UserContext["orderNumber"];
    }
    
    [TestCleanup]
    public void TestCleanup()
    {
        // When the CreateOrder test is completed, add the order number to the UserContext
        // so the next will have access to it
        UserContext.Add("orderNumber", orderNumber);
    }
    
  4. 要访问UserContext测试,请在每个 UnitTest 上添加以下属性:

    public LoadTestUserContext UserContext
    {
        get
        {
            return TestContext.Properties["$LoadTestUserContext"] as LoadTestUserContext;
        }
    }
    
  5. 在您加载测试配置集Test Mix Model = Based on sequential order时,您的测试将按照您在Test Mix.

注意:为此,您必须将每个都添加TestMethod到单个 UnitTest 文件中。如果您将它们放在同一个文件中,则TestInializeandTestCleanup方法将在每个TestMethod包含的文件上执行,并且您可能会尝试访问您没有的数据(例如,尝试在 CreateOrder 上获取 orderNumber)。

于 2013-06-18T08:15:25.677 回答