2014-02-06 38 views
3

我無法找到一個方法來運行同一測試類至極內不同的單元測試使用不同的數據源如何使用多個數據源運行單元測試?

這是一個測試類的例子:

namespace Calc.Tests 
    { 
    [TestClass] 
    public class CalcTests 
    { 
     private static TestContext Context { get; set; } 

     [ClassInitialize] 
     public static void ClassInitialize(TestContext context) 
     { 
      Context = context; 
     } 

     [TestMethod] 
     [DeploymentItem("AddedValues.csv")] 
     [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", @"|DataDirectory|\AddedValues.csv", "AddedValues#csv", DataAccessMethod.Sequential)] 
     public void Add_UsingValuesWithinCsv() 
     { 
      Calc calc = new Calc(); 

      // Arrange 
      int firstValue = Convert.ToInt32(Context.DataRow["firstValue"]); 
      int secondValue = Convert.ToInt32(Context.DataRow["secondValue"]); 
      int expectedResult = Convert.ToInt32(Context.DataRow["expectedResult"]); 

      // Act 
      int result = calc.Add(firstValue, secondValue); 

      // Assert 
      Assert.AreEqual<int>(result, expectedResult); 
     } 

     [TestMethod] 
     [DeploymentItem("AddedValues.xml")] 
     [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", @"|DataDirectory|\AddedValues.xml", "TestCase", DataAccessMethod.Sequential)] 
     public void Add_UsingValuesWithinXml() 
     { 
      Calc calc = new Calc(); 

      // Arrange 
      int firstValue = Convert.ToInt32(Context.DataRow["firstValue"]); 
      int secondValue = Convert.ToInt32(Context.DataRow["secondValue"]); 
      int expectedResult = Convert.ToInt32(Context.DataRow["expectedResult"]); 

      // Act 
      int result = calc.Add(firstValue, secondValue); 

      // Assert 
      Assert.AreEqual<int>(result, expectedResult); 
     } 
    } 
    } 

如果我利用XML數據運行單元測試,一切都正常運行。

如果我運行只有使用csv數據的單元測試,eveything運行良好。

如果我運行所有測試內的測試類,第二個單元測試運行結束時出錯。

有沒有辦法確保數據源在每個單元測試之前重置?

我已經看了TestCleanup和TestInitialize,但沒有發現任何這樣做......

回答

2

我知道了!

我誤解了TestContext的使用,但我不得不在我的ClassInitialize方法中進行初始化。

因爲我有我的ClassInitialized作爲靜態,我需要將我的TestContext設置爲靜態並且TestContext只在ClassInitialize初始化一次。

根據MSDN文檔,我的TestContext屬性需要是一個實例屬性,MSTest會爲我自動提供TestContext。 http://msdn.microsoft.com/en-us/library/ms404699(v=vs.80).aspx

這樣做使得我的TestContext.DataRow可以正常工作,並且作爲TestMethod屬性提供的DataSource。

希望這可能有助於某人,有一天!

+0

我不明白。 – Onilol

0

什麼是你遇到過使用TestInitialize/TestCleanUp問題?

我會嘗試使用以下兩種方法之一來執行初始化或清理。

[TestInitialize()] 
public void RunsBeforeEveryTest() { } 

[TestCleanup()] 
public void RunsAfterEveryTest() { } 
+0

我沒有問題使用TestCleanup的TestInitialize,我經常使用這些。我首先雖然我需要重置使用Cleanup中的每個DataSource,因爲DataSource上下文不會因每個單元測試而根據[DataSource]屬性更改。我在我的帖子中解釋了我的問題。將它標記爲回答時,我可能(現在不能) – Doum

相關問題