以编程方式创建MSTest单元测试

时间:2013-06-05 20:23:42

标签: c# .net unit-testing mstest vs-unit-testing-framework

我正在寻找一种使用MSTest以编程方式创建单元测试的方法。我想循环一系列配置数据并根据信息动态创建测试。配置数据在编译时将不可用,并且可能来自外部数据源,例如数据库或XML文件。场景:将配置数据加载到测试工具中并循环访问数据,同时为每个元素创建新测试。希望每个动态创建的测试都单独报告(成功/失败)。

1 个答案:

答案 0 :(得分:3)

您可以使用Data Driven Testing,具体取决于数据的复杂程度。如果您只是替换值和测试以确保您的代码可以处理可能的方式相同的输入,但这听起来并不像您所追求的那样。 (你可以把它变得更复杂,毕竟你所做的只是从数据源中提取值,然后根据它做出程序化的决定)

所有MS Test确实会运行一系列测试,然后生成结果(在xml文件中),然后由调用应用程序解释。它只是执行通过属性指定的方法的包装器。

你要问的是动态编写C#代码,让它在线束中执行。 如果你真的想通过MS测试来运行,你可以:

  1. 构建一个查看XML文件的方法(或一系列方法)
  2. 写出C#代码(我可能会看看T4模板)(就个人而言,我会用F#来做这个,但我更偏向于函数式语言,这对我来说会更容易)。
  3. 调用csc.exe(C#编译器)
  4. 调用MS测试
  5. 您也可以直接在running application中编写MSIL代码,并尝试让MS Test执行它,这对某些人来说可能很有趣,但这可能很耗时而且不一定能保证能够正常工作(我没有没试过,所以我不知道坑会是什么样的。

    基于此,快速构建自己的线束可能会更容易,它将解释您的XML文件并动态构建您的测试场景并生成相同的结果文件。 (毕竟结果是重要的,而不是你如何到达那里。)因为你说它在编译期间不可用,我猜你不想在VS工作室窗口中查看结果。

    实际上,就个人而言,我不会将XML用作域特定语言(DSL)。解析它很容易,因为.NET已经为你做了这个,但它限制了你如何定义你的方法的功能。它用于传递数据,虽然技术上代码是一种数据形式,但它没有足够的表现力来传达更多正式语言的能力。这只是我个人的意见,并且有许多方法可以给猫皮肤。