5

2 つのサブ テスト メソッドを呼び出すテスト メソッドがあります。サブ メソッドは両方とも、XML ファイルからのデータ ドリブンです。各サブメソッドを実行すると、正常に実行され、成功します。ただし、メイン テスト メソッド (両方のサブ メソッドの呼び出し元) を実行すると、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  
    }

すべて実行すると、2 つのメソッドが成功し、1 つのメソッドが失敗します。個別に実行すると、SaveData_Json_LocalStorage が渡されず、常に TestContext.DataRow が null として取得されます。内部で複数のメソッドを呼び出しても問題ありませんか。連鎖テストケースを書く最良の方法は何ですか。

4

1 に答える 1

2

連鎖は、再作成できないデータが必要な場合にのみ行う必要があります。それ以外の場合は、各テストを個別のテストにします。

XML ファイルから駆動されるデータ。

読み取り専用Xml を、メソッドでテストする前に1 回実行されるプロパティに配置することを検討してください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 ... );
}

それ以外の場合は、実行されているテストに応じてデータをモックするか、特定の呼び出しからのものである場合はどうshimですか? 私の記事Shim Saves The Day in A Tricky Unit Test Situationを参照してください。

于 2015-05-18T20:41:56.583 に答える