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

5

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


3
为什么不直接使用集成于MSTest中的数据驱动测试功能? - Oded
1个回答

3
你可以根据数据的复杂程度使用数据驱动测试。如果你只是替换值和测试以确保你的代码能够处理相同的输入,那么这可能是可行的,但这并不像你想要的。你可以让它更加复杂,毕竟你只是从数据源中获取值,然后根据它做出程序决策。
MS Test其实只是运行一系列测试,然后生成结果(在xml文件中),然后由调用应用程序进行解释。它只是一个通过属性执行指定方法的包装器。
听起来你正在询问如何动态编写C#代码,并在测试框架中执行。如果你真的想要通过MS Test运行它,你可以:
  1. 构建一个方法(或一系列方法),查看XML文件
  2. 编写C#代码(我可能会考虑使用T4模板)(个人而言,我更倾向于函数式语言F#,这对我来说更容易)。
  3. 调用csc.exe(C#编译器)
  4. 调用MS Test

您还可以将MSIL代码直接写入运行的应用程序中,并尝试让MS Test执行它,这对某些人来说可能很有趣,但这可能耗时且不一定能够保证成功(我没有尝试过,所以不知道其中的陷阱)。

基于此,可能更容易快速构建自己的测试套件,该套件将解释您的XML文件并动态构建出测试场景,并生成相同的结果文件。(毕竟结果才是重要的,而不是如何到达那里。)由于您说在编译时不可用,因此我猜测您不想在VS Studio窗口中查看结果。

其实,就我个人而言,我不会使用XML作为您的领域特定语言(DSL)。解析它很容易,因为.NET已经为您完成了这项工作,但它在定义方法如何运作方面有一定的限制。它是用于传达数据的,虽然技术上代码是一种数据形式,但它没有足够的表现力来传达更多正式语言中的能力。这只是我的个人意见,有很多方法可以达成目标。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接