5

我找不到在使用不同 DataSource同一测试类中运行不同单元测试的方法。

下面是一个测试类的例子:

  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 的数据运行单元测试,那么一切都运行良好。

如果我在测试类中运行所有测试,则第二个单元测试运行以错误结束。

有没有办法确保在每次单元测试之前重置 DataSource?

我查看了 TestCleanup 和 TestInitialize 但没有找到任何可以这样做的...

4

2 回答 2

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 一起正常工作。

希望有一天这对某人有所帮助!

于 2014-02-07T10:26:59.883 回答
0

您在使用时遇到了什么问题TestInitialize/TestCleanUp

我会尝试使用以下两种方法之一进行初始化或清理。

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

[TestCleanup()]
public void RunsAfterEveryTest() { }
于 2014-02-07T04:45:27.297 回答