在MSTest中的测试方法中共享状态

时间:2008-10-17 01:28:38

标签: c# unit-testing mstest

如何在MSTest中的TestMethods之间共享状态。这些测试将按顺序运行并按顺序运行。

    private TestContext testContext;

    public TestContext TestContext
    {
        get { return this.testContext; }
        set { this.testContext = value;}
    }

    [TestMethod]
    public void Subscribe()
    {
        bool subscribed = true;
        TestContext.Properties.Add("subscribed", subscribed);
        Assert.IsTrue(subscribed == true, string.Format("Subscribed...{0}", this.GetHashCode()));
    }


    [TestMethod]
    public void GenerateEvent()
    {
        bool subscribed = (bool)TestContext.Properties["subscribed"];
        Assert.IsTrue(subscribed == true, string.Format("Subscribed...{0}", this.GetHashCode()));

    }

提前致谢。

4 个答案:

答案 0 :(得分:1)

Vyas,我同意Chad的看法,你仍然做错了。

也就是说,您可以查看使用TestContext对象。

请参阅http://blogs.msdn.com/vstsqualitytools/archive/2006/01/10/511030.aspx

答案 1 :(得分:0)

正如乍得指出的那样,似乎我别无选择,只能使用一次测试[一旦工具强迫我做正确的事情;)]来测试整个流程。

似乎我可以使用TestContext.BeginTimer& EndTimer为方法中的每个调用计时。

以下是我收到此答案的MSDN论坛链接

答案 2 :(得分:0)

您可以使用静态成员在测试方法之间共享数据。

例如:

private static List<string> SharedValues = new List<string>();

[TestMethod]
public void TestMethod1()
{
   SharedValues.Add("Awesome!");
}

[TestMethod]
public void TestMethod2()
{
   SharedValues.Add("Thanks for the answer!");
}

[TestMethod]
public void TestMethod3()
{
    Assert.IsTrue(SharedValues.Contains("Awesome!"));
    Assert.IsTrue(SharedValues.Contains("Thanks for the answer!"));
}

复制此代码并创建一个新的有序测试,测试TestMethod1,TestMethod2,TestMethod3。它会通过!

答案 3 :(得分:0)

您可以通过将其存储在类级静态字段或属性而不是TestContext中来跨测试共享信息。那样,只有一个副本。此外,任何一个测试放入这些字段或属性的任何内容都可用于任何后续测试。

话虽如此......有序和/或相互依赖的测试仍然是邪恶的。