2009-08-29 11 views
5

我在C#VS2008中使用Xml数据源编写数据驱动的单元测试。扩展Microsoft.VisualStudio.TestTools.DataSource.XML

属性看起来像这样,一切都很棒。

[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 preferrably配置。例如,一个布尔如果是true,我将遍历Xml文件中的所有行,如果为false,则只运行一个。

我不想在测试用例本身中执行此项检查 - 我有1000个测试用例需要这个测试用例。

任何有关如何实现这一目标的指导将不胜感激。

+1

有什么不对劲,如果你有1000个的文件系统测试(老实说,在这一点上,你正在进行集成测试,而不是单元测试)。您可能需要考虑做某种模拟或存根以隔离要测试的代码,以查找只需要一行XML的情况。 – Michael

回答

1

使用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); 
    } 
} 
+0

这是一个好主意,但是在** AssemblyInitialize运行之前,因为'DataSource'绑定了数据**,所以会出现问题。测试将始终使用数据源文件的“旧”版本卡住。 – Snixtor