我正在使用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();
}
}
}
提前致谢
答案 0 :(得分:0)
三年... 解?切换到xunit。我得出的结论是mstest很烂 Heck MS本身在内部使用xunit,所以有