在MSTest中的运行时期间动态创建单元测试方法

时间:2009-12-02 00:56:02

标签: unit-testing nunit mstest

MSTest中是否有等效的SuiteBuilder?到目前为止找不到一个。

我有一堆xml文件,每个文件都被视为映射到测试方法。由于其中有100个并且为这些中的每一个手动编写测试,因此不是一个好主意。

所以在nunit中你可以实现ISuiteBuilder并让测试用例动态运行并显示为那些测试方法。

我正在寻找一种在MSTest中做同样事情的方法。

我查看了DataSource属性,但是每个测试方法都需要1个数据源xml文件/ csv,这迫使我编写了100多个测试方法。我还希望将每个xml文件保持独立,并且不要将它们全部归入到一个巨大的文件中,在这种情况下它将变得无法维护。

有人试过这个或有任何建议吗?

2 个答案:

答案 0 :(得分:2)

不完全符合您的要求,但您可以使用pex进行自动和可参数化的白盒测试。这样,你不需要手动完成所有这些工作。 Pex支持MSTest和NUnit。生成的测试使用额外的文件,您不需要任何xml文件。

但我认为您无法轻松使用NUnit中现有的.xml文件并使用pex与MSTest共享 - 如果这是您的意图。

答案 1 :(得分:1)

我已经这样做了。以下是您需要做的事情:

测试:

[TestMethod]
[DeploymentItem("MyTestData")]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
                   "|DataDirectory|\\MyTestData.xml",
                   "Test",
                    DataAccessMethod.Sequential)]
public void MyTest()
{
    string file = TestContext.DataRow[0].ToString();
    string expectedResult = TestContext.DataRow[1].ToString();
        // TODO: Test something
}

MyTestData.xml:

<?xml version="1.0" encoding="utf-8" ?>
<Rows>
  <Test>
    <File>test1.xml</File>
    <Result>1</Result>
  </Test>
  <Test>
    <File>test2.xml</File>
    <Result>2</Result>
  </Test>
</Rows>

test1.xml和test2.xml必须存在于MyTestData目录中。