有没有办法在一个单元测试中设置一个可供另一个单元测试使用的值

时间:2016-02-10 10:32:56

标签: c# unit-testing

我有一个简单的问题,我创建一个单元测试类,让我们说它看起来像这样:

namespace Tests
{
    [TestClass]
    public class ApiTest
    {
         private var x;

         [TestMethod]
         public testA()
         {
             some operactons
             x = some value
         }

         [TestMethod]
         public testB()
         {
             if(x == null)
                test fail
         }
    }

如上所述,我感兴趣的是,是否可以在测试方法A中设置一个值(x),以便它可以在测试方法B中使用?

3 个答案:

答案 0 :(得分:3)

你可以通过将var x声明为静态来实现这一点:

private static var x;

但我不建议从TestMethod设置变量。如果" var x"是每个其他TestMethod(testC,testD,...)中需要的变量,然后在ClassInitialize()中设置它。这样,var x可用于类ApiTest中的每个TestMethod。

[TestClass]
public class ApiTest
{
     private static var x;

     [ClassInitialize()]
     public static void InitApiTest(TestContext context)
     {
         some operactons
         x = some value
     }

     [TestMethod]
     public testA()
     {
         //Obsolete
     }

     [TestMethod]
     public testB()
     {
         if(x == null)
            test fail
         else
            ...
     }
}

答案 1 :(得分:1)

与所建议的一样,你可能不应该首先做到这一点。单元测试应相互独立。但您可以在Test initializer或Class initializer中设置测试的先决条件,例如

private int x;

[TestInitialize]
public void Init()
{
    x = ...;
}

测试初始化​​程序将在测试类中的每个测试之前执行。

答案 2 :(得分:0)

在运行每个测试之前,使用TestInitialize属性运行代码。具有此属性的方法将在测试a和测试b之前运行。

[TestInitialize()]
public void MyTestInitialize() 
{ 
    x = someValue;
}

如果您只想在所有测试之前执行一次,请在构造函数中执行此操作。

MSDN about Visual Studio unit tests