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

本文关键字:MSTest 单元测试 创建 方式 编程 | 更新日期: 2023-09-27 18:17:12

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

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

您可以根据数据的复杂程度使用数据驱动测试。如果您只是替换值并进行测试以确保您的代码可以处理相同的输入,那么这可能是可行的方法,但这听起来并不像您所追求的。(您可以使其更复杂,毕竟您所做的一切都是从数据源中提取值,然后根据它做出编程决策)

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

听起来你要求的是动态地编写c#代码,并让它在线束中执行。如果您真的想通过MS测试运行此代码,您可以:

  1. 构建一个方法(或一系列方法)来查看XML文件
  2. 编写c#代码(我可能会为此查看T4模板)(就个人而言,我会使用f#来完成此操作,但我更倾向于函数式语言,这对我来说更容易)。调用csc.exe (c#编译器)
  3. 调用MS Test

您也可以直接将MSIL代码写入正在运行的应用程序中,并尝试让MS Test执行它,这对某些人来说可能很有趣,但这可能很耗时,而且不一定能保证工作(我没有尝试过,所以我不知道坑会是什么)。

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

实际上,就个人而言,我不会使用XML作为您的领域特定语言(DSL)。解析它很容易,因为。net已经为您完成了,但是它在如何定义方法的功能方面受到了限制。它是用来传递数据的,尽管从技术上讲,代码是数据的一种形式,但它没有足够的表达能力来用更正式的语言传达许多功能。这只是我个人的观点,有很多方法可以剥猫的皮。