Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试TestContext多个调用_C#_Unit Testing_Testcontext - Fatal编程技术网

C# 单元测试TestContext多个调用

C# 单元测试TestContext多个调用,c#,unit-testing,testcontext,C#,Unit Testing,Testcontext,我有一个测试方法,它调用2个子测试方法。这两个子方法都是由XML文件驱动的数据。如果我运行每个子方法,它们就会运行良好并成功。然而,当我运行Main测试方法(两个子方法的调用者)时,它发现TestContext.DataConnection和TestContext.DataRow为null private TestContext testContext; public TestContext TestContext { get { return testC

我有一个测试方法,它调用2个子测试方法。这两个子方法都是由XML文件驱动的数据。如果我运行每个子方法,它们就会运行良好并成功。然而,当我运行Main测试方法(两个子方法的调用者)时,它发现TestContext.DataConnection和TestContext.DataRow为null

    private TestContext testContext;
    public TestContext TestContext
    {
        get { return testContext; }
        set { testContext = value; }
    }
    [TestMethod]
    public void SaveEmpty_Json_LocalStorage()
    {
        // Testing JSON Type format export and save
         SetWindowsUsers();
        // Add Network Information
        SetWifiInformation();

        // More logic and assertions here.
        // More logic and assertions here.
        // More logic and assertions here.
    }

    [TestMethod]
    [DeploymentItem("input.xml")]
    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
               "input.xml",
               "User",
                DataAccessMethod.Sequential)]
    public void SetWindowsUsers()
    {
      Console.WriteLine(TestContext.DataRow["UserName"].ToString())
      // MORE LOGIC and Asserts  
    }

    [TestMethod]
    [DeploymentItem("input.xml")]
    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
               "input.xml",
               "WifiList",
                DataAccessMethod.Sequential)]
    public void SetWifiInformation()
    {
      Console.WriteLine(TestContext.DataRow["SSID"].ToString())
      // MORE LOGIC and Asserts  
    }

如果我全部运行,两个方法通过,一个失败。如果我单独运行,SaveData\u Json\u LocalStorage不会通过,总是将TestContext.DataRow设置为null。可以在内部调用多个方法吗。编写链接测试用例的最佳方法是什么。

只有在必须有不可重新创建的数据时才应该进行链接。否则,将每个测试作为不同的测试

从XML文件驱动的数据

考虑将只读Xml放入一个属性中,该属性在
ClassInitialization
方法的测试之前运行一次。然后测试各个操作,然后测试“主”操作,每个操作作为一个单独的可测试单元

public static XDocument Xml { get; set; }

[DeploymentItem("input.xml")]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
           "input.xml",
           "User",
            DataAccessMethod.Sequential)]
[ClassInitialize()]
public static void ClassInit(TestContext context)
{ // This is done only once and used by other tests.
    Xml = ...
    Assert.IsTrue(Xml.Node ... );
}


否则,根据正在执行的测试或来自特定调用的数据来模拟数据,使用
垫片如何?请参阅我的文章。

我从未真正看到过
DeploymentItem
DataSource
属性,但我非常确定它们是问题的根源。属性本身实际上不做任何事情。您需要单元测试框架来处理它们。(在本例中设置数据。)当您直接调用
SetWindowsUsers
SetWifiInformation
时,不会执行基于属性的设置。通常应避免链接测试用例。由测试运行者决定执行顺序。而是对测试用例使用常规设置方法。@JasonWatkins当我直接调用SetWindowsUsers和SetWifiInformation时,“DataSource”和DeploymentItems这两个属性都可以正常工作,我从XML和测试通过中获取数据。我没有将TestContext.DataRow设置为null。这两个属性非常标准,用于数据驱动测试cases@Henrik:即使我也不想写链式方法。需要在Main方法中加载2组数据。子方法A和B使用数据源和表加载它。每个方法A和B都使用自己的表。我的场景是方法A和B是不同的测试用例,但是主方法需要A和B作为运行进一步逻辑的先决条件。它需要来自XML文件的两个表的数据。如果我找到了从多个表加载数据的方法,那么我将删除对chained方法的调用,并编写独立的数据加载。@rocky我将考虑为每个单元测试创建一个唯一的垫片或
mock
值。请看我的文章,谢谢。我会试着去模仿。