C# MSTest中TestMethods之间共享状态

C# MSTest中TestMethods之间共享状态,c#,unit-testing,mstest,C#,Unit Testing,Mstest,如何在MSTest中的TestMethods之间共享状态。这些测试将作为顺序测试运行 private TestContext testContext; public TestContext TestContext { get { return this.testContext; } set { this.testContext = value;} } [TestMethod] public void Subscr

如何在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()));

    }

提前谢谢。

维亚斯,我同意查德的观点,你仍然在做错事

也就是说,您可以研究如何使用TestContext对象


参见

正如Chad所指出的,似乎我别无选择,只能使用一个测试来测试整个流程

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


这里是MSDN论坛的链接,我在那里收到了这个答案

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

例如:

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!"));
}
private static List sharedvalue=new List();
[测试方法]
公共void TestMethod1()
{
添加(“太棒了!”);
}
[测试方法]
公共void TestMethod2()
{
添加(“谢谢你的回答!”);
}
[测试方法]
公共void TestMethod3()
{
IsTrue(SharedValues.Contains(“Awesome!”);
Assert.IsTrue(SharedValues.Contains(“感谢您的回答”);
}

复制此代码并创建一个新的有序测试TestMethod1、TestMethod2、TestMethod3。会过去的

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


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

一般来说,要求测试依赖于其他测试并以任何顺序运行都是有害的。每个测试都应该是原子的、独立的——能够自己运行。一组测试中的任何常见设置代码都应该在setup()方法中,我同意。。。但是,这是一个非常具体的情况,我必须用MSSTEST来模拟一个函数流(它被分解成连续的步骤)来进行负载测试(再次使用MSSTEST)。Vyas:这是一个集成测试,你应该考虑这样做。不同的规则适用于集成测试。考虑一个测试的整个流程,perhaps@chadmyers-如果可以的话,我会+1评论-pChad,严格地说,正如您正确地指出的,我尝试的根本不是单元测试。我想进行这些测试[步骤],并在上面使用负载测试基础设施。问题是,对整个流程进行一次测试并不能给出每个步骤的性能数据。Chris,TestContext并没有在TestMethod之间共享。每个TestMethod都提供了一个新的TestContext实例(因为它们都在不同的实例上被调用),这是我的主要问题。这就是代码强调的内容。对这种含糊不清表示歉意。还是我在这里遗漏了什么?