【问题标题】:MSTest Data driven test not running all rowsMSTest 数据驱动测试未运行所有行
【发布时间】:2026-01-03 12:10:01
【问题描述】:

我正在使用 VS2015,并在 MSTest 中编写测试。似乎 MSTest 没有运行数据驱动测试中的所有行 例如,这是一个示例测试:

//there is a XML datafile that has 1000 "rows", 1 to 1000
int x = Int32.Parse((string)TestContext.DataRow["Payload"]);
if (x == 999)
    throw new Exception();

当我调试测试时,它在 999 处正确失败。但是,当我运行测试(而不是调试)时,测试结果(大部分时间)表明测试已通过。测试的详细信息显示,并非所有 1000 行都经过测试。 关于这里发生了什么的任何想法?

注意:这个问题大部分时间都会发生。千载难逢,测试结果似乎已经运行了所有 1000 行,并正确显示了失败的测试。

mcve 按要求:

[TestClass]
public class TestDataDriven
{
    private TestContext testContextInstance;
    public TestContext TestContext
    {
        get { return testContextInstance; }
        set { testContextInstance = value; }
    }

    [TestMethod]        
    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
               "data.xml",
               "Row",
                DataAccessMethod.Sequential)]
    public void TestMethod1()
    {
        int x = Int32.Parse((string)TestContext.DataRow["Payload"]);
        if (x == 999)
            throw new Exception();
    }
}

确保在构建位置有一个这种格式的 xml 文件

<?xml version="1.0" encoding="utf-8"?>
<Iterations>
  <Row>
    <Payload>1</Payload>
  </Row>
  <Row>
    <Payload>2</Payload>
  </Row>
.
.
.
  <Row>
    <Payload>1000</Payload>
  </Row>
</Iterations>

注意:如果你愿意的话,你可以从 NuGet 获取 MSTestHacks,那么下面的代码会更简单一些,因为你不需要生成数据文件。

namespace Namespace
{
    [TestClass]
    public class TestDataDriven : TestBase
    {
        List<int> _source = new List<int>( Enumerable.Range(1,1000));
        public List<int> Source
        {
            get { return _source; }
            set { _source = value; }
        }

        [TestMethod]
        [DataSource("Namespace.TestDataDriven.Source")]
        public void TestMethod1()
        {
            var x = TestContext.GetRuntimeDataSourceObject<int>();
            if (x == 999)
                throw new Exception();
        }
    }
}

提前致谢

【问题讨论】:

  • 你有mcve吗?
  • 我刚刚添加了一个 mcve。无论是 mstest iteslf 还是 mstesthacks,我仍然有问题
  • 我在从 sql server 驱动时遇到了同样的问题
  • 我遇到了同样的问题。有人能解决这个问题吗?

标签: visual-studio-2015 mstest data-driven-tests


【解决方案1】:

三年... 解决方案?切换到 xunit。我得出的结论是 mstest 很烂 哎呀,MS自己在内部使用xunit,所以就是这样

【讨论】:

  • XUnit 不允许使用不同的数据集并行运行相同的理论,这从本质上阻止了数据驱动测试。