Тест на основе данных MSTest не запускает все строки

Я использую 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();
        }
    }
}

заранее спасибо


person Dawood Moazzem    schedule 25.01.2016    source источник
comment
У вас есть mcve?   -  person NikolaiDante    schedule 25.01.2016
comment
Я только что добавил файл mcve. будь то mstest iteslf или mstesthacks, у меня все еще есть проблема   -  person Dawood Moazzem    schedule 26.01.2016
comment
У меня такая же проблема с сервером sql   -  person Chris Surfleet    schedule 22.06.2016
comment
У меня такая же проблема. Кто-нибудь смог это решить?   -  person Russ Wilson    schedule 12.07.2016


Ответы (1)


Три года спустя .... Решение? Переключитесь на xunit. Я пришел к выводу, что mstest - отстой, черт возьми, сами MS используют xunit для внутренних целей, так что

person Dawood Moazzem    schedule 04.02.2019
comment
XUnit не позволяет запускать одну и ту же теорию с разными наборами данных параллельно, что существенно препятствует тестированию на основе данных. - person metabuddy; 10.04.2019