代码之家  ›  专栏  ›  技术社区  ›  Vin

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

  •  8
  • Vin  · 技术社区  · 15 年前

    MSTest中是否有SuiteBuilder的等价物?到目前为止找不到。

    我有一堆xml文件,每一个都映射到一个测试方法。因为有100个这样的测试,手动为每个测试编写测试并不是一个好主意。

    因此,在nunit中,您可以实现ISuiteBuilder,让测试用例动态运行,并显示为许多测试方法。

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

    我已经研究了DataSource属性,但是它满足了每个测试方法一个datasourcexml文件/csv,这迫使我编写100个测试方法。我还希望将每个xml文件分开,并且不要将它们全部合并到一个大文件中,在这种情况下,它将变得不可维护。

    有人试过这个或者有什么建议吗?

    2 回复  |  直到 15 年前
        1
  •  2
  •   mbx    14 年前

    不是你想要的,但你可以用 pex 用于自动和参数化白盒测试。这样,您就不需要手动执行所有这些操作。Pex支持MSTest和NUnit。生成的测试使用一个额外的文件,您不需要任何xml文件。

    但是我认为你不能轻易地使用NUnit中现有的.xml文件,并使用pex与MSTest共享它们-如果这是你想要的。

        2
  •  2
  •   frast    14 年前

    我已经做过了。以下是您需要做的:

    测试:

    [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目录中。