Расширение Microsoft.VisualStudio.TestTools.DataSource.XML - PullRequest
5 голосов
/ 29 августа 2009

Я пишу управляемые данными модульные тесты с использованием источника данных Xml в C # 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, я запускаю только одну.

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

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

1 Ответ

1 голос
/ 28 ноября 2012

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

Сокращенный пример (использование простого копирования для подготовки тестового примера, управляемого данными env:

[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);
  }
}
...