Я использую 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>
Примечание: если вы хотите это сделать, вы можете получить MSTestHacks из NuGet, тогда следующий код будет несколько проще, поскольку вам не нужно создавать файл данных.
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();
}
}
}
заранее спасибо