【问题标题】:Programmatically create MSTest unit tests以编程方式创建 MSTest 单元测试
【发布时间】:2013-06-05 20:23:42
【问题描述】:

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

【问题讨论】:

  • 为什么不直接使用 MSTest 内置的数据驱动测试功能?

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


【解决方案1】:

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

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

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

  1. 构建一个查看 XML 文件的方法(或一系列方法)
  2. 写出 C# 代码(我可能会为此查看 T4 模板)(我个人会使用 F# 来执行此操作,但我更偏向于函数式语言,这对我来说会更容易)。
  3. 调用 csc.exe(C# 编译器)
  4. 调用 MS 测试

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

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

实际上,就我个人而言,我不会将 XML 用作您的领域特定语言 (DSL)。它的解析很容易,因为 .NET 已经为您做到了,但它限制了它如何定义您的方法如何运行。它是用来传达数据的,尽管从技术上讲,代码是一种数据形式,但它没有足够的表达力来用更正式的语言传达许多能力。不过,这只是我个人的看法,给猫剥皮的方法有很多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 2013-09-14
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    相关资源
    最近更新 更多