Расширение Microsoft.VisualStudio.TestTools.DataSource.XML

Я пишу модульные тесты, управляемые данными, с использованием источника данных Xml в С# VS2008.

Атрибуты выглядят примерно так, и все отлично работает.

    [DeploymentItem("HtmlSchemaUrls.xml")]
    [DataSource("DataSource", "Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\HtmlSchemaUrls.xml", Microsoft.VisualStudio.TestTools.WebTesting.DataBindingAccessMethod.Sequential, "URL")]
    [DataBinding("DataSource", "URL", "URL_Text", "DataSource.URL.URL_Text")]
    [TestMethod]

Я хотел бы расширить возможности источника данных Microsoft.VisualStudio.TestTools.DataSource.XML, желательно настраиваемого через App.config. Например, если значение bool равно true, я просматриваю все строки в файле Xml, а когда false — только одну.

Я не хочу выполнять эту проверку в самом тестовом примере — у меня есть тысячи тестов с этим требованием.

Любые рекомендации о том, как этого добиться, будут высоко оценены.


person Kenn    schedule 29.08.2009    source источник
comment
Что-то кажется неправильным, если у вас тысячи тестов, затрагивающих файловую систему (честно говоря, в этот момент вы проводите интеграционное, а не модульное тестирование). Вы можете подумать о том, чтобы сделать какую-то фикцию или заглушку, чтобы изолировать код, который вы тестируете, для тех случаев, когда вам нужна только одна строка XML.   -  person Michael    schedule 02.11.2012


Ответы (1)


Используйте AssemblyInitialize, чтобы скопировать набор тестов XML из какого-либо репозитория наборов тестов.
1 – таким образом вам не понадобится [DeploymentItem("HtmlSchemaUrls.xml")]
2 – вместо того, чтобы просто копировать его, создайте новый файл, содержащий записи, которые необходимо протестировать (используя параметризованный xsl?)
3 — все параметры для этой операции можно сохранить в файле app.config

Укороченный пример (использование простой копии для подготовки окружения тестового примера на основе данных):

[AssemblyInitialize()]
public static void AssemblyInit(TestContext context)
{
  ...
  string strRelocatedTestCaseFile =
    Path.Combine(TheToolBox.ShortPath(AppDomain.CurrentDomain.BaseDirectory),                                                                        
                 "TestCase.xml");
  if(!string.IsNullOrEmpty(strTestCaseFile)) 
  {
    string strMessage = "Copying TestCase input file: '" + 
                        strTestCaseFile + "' to '" + strRelocatedTestCaseFile + "'";
    Console.WriteLine(strMessage);
    File.Copy(strTestCaseFile, strRelocatedTestCaseFile, true);
  }
}
person Laurent de Laprade    schedule 28.11.2012
comment
Это хорошая идея, но она не работает, потому что DataSource связывает данные до запуска AssemblyInitialize. Тест всегда будет зависать, используя старую версию файла источника данных. - person Snixtor; 06.11.2014