Модульный тест, управляемый XML-данными, с вложенными узлами

Я не могу найти что-то в Интернете за последние часы. Ситуация следующая: я хочу протестировать написанный мной парсер, для этого у меня есть желание написать юнит-тест, управляемый данными. XML у меня выглядит следующим образом:

<Test>
   <ParseTest>
      <Case>
         <uri>somestring</uri>
         <key>somestring</key>
         <value>somestring</value>
      </Case>
      <Case>
         <uri>somestring</uri>
         <key>somestring</key>
         <value>somestring</value>
      </Case>
   </ParseTest>
</Test>

Тест — это мой корневой узел для всего класса. ParseTest должен быть корнем для каждого метода, поэтому я хочу получить доступ к каждому запуску одного узла case с его дочерними элементами.

Мой тестовый код:

[TestMethod]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",@"PATH\name.xml","ParseTest",DataAccessMethod.Seqential)]
public void ParseTest()
{
   //Arrange       
      m_testContext.DataRow["uri"].ToString();
   //Act
   //Assert
}

Проблема в том, что Framework не находит правильные дочерние узлы. Файл найден правильно. Я запускаю тест через «Выполнить тест» в VS.


person school_guy    schedule 13.04.2018    source источник
comment
Не могли бы вы подробнее рассказать, что за ошибка? Платформа тестирования не находит тест или файл? Как вы запускаете свои тесты (например, re# — это теневое копирование тестовых сборок, что может привести к таким ошибкам)? Вы пробовали отлаживать (или выводить Directory.GetCurrentDirectory())?   -  person Paul Kertscher    schedule 13.04.2018
comment
@PaulKertscher Лучше?   -  person school_guy    schedule 13.04.2018
comment
Я просто просматриваю тесты на основе данных с помощью MSTest, дай мне секунду.   -  person Paul Kertscher    schedule 13.04.2018
comment
Как вы пытаетесь получить доступ к своим тестовым данным?   -  person Paul Kertscher    schedule 13.04.2018
comment
Я не получаю доступ к данным. MS Test Framework делает это за меня.   -  person school_guy    schedule 13.04.2018
comment
Я знаю, что он загружает данные из XML, но в какой-то момент вы должны спросить MSTest что-то вроде: Пожалуйста, дайте мне текущие данные.   -  person Paul Kertscher    schedule 13.04.2018
comment
Ах это. Я делаю это с классом тестового контекста, но я открыт для лучших вариантов...   -  person school_guy    schedule 13.04.2018


Ответы (1)


Следуя этому примеру, дополнительные ParseTest избыточны (или вложенные Case теги избыточны). Насколько я понял, тестовая среда загрузит все теги с именем ParseTest и запустит тест для каждого (учитывая, что вы передали "ParseTest" в качестве имени таблицы). Не зная, как вы получаете доступ к данным из своего теста, я бы предположил, что XML должно понравиться что-то вроде

<Test>
   <ParseTest>
      <uri>somestring</uri>
      <key>somestring</key>
      <value>somestring</value>
   </ParseTest>
   <ParseTest>
      <uri>somestring</uri>
      <key>somestring</key>
      <value>somestring</value>
   </ParseTest>
</Test>
person Paul Kertscher    schedule 13.04.2018
comment
Ваше решение работает, но проблема в том, что модульный тест не заканчивается. Он перебирает каждый элемент, а затем ждет. Я не могу описать, в каком состоянии находится MSTest, потому что отладка работает нормально, но после нажатия F11 после последней строки он просто ждет... - person school_guy; 13.04.2018
comment
Отсутствовал Environment.Exit(). Теперь с внедрением зависимостей это работает... - person school_guy; 13.04.2018