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

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

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

最佳答案

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

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

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

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

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

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

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

关于c# - 以编程方式创建 MSTest 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16949153/

相关文章:

c# - 将 C# 异步 Lambda 方法分配给作为任务类型的变量

c# - Azure 函数 C# : Create or replace document in cosmos db on HTTP request

c# - 将 TextBox 的值填充到特定的 Textbox

unit-testing - Rails3 : Find method not working with fixtures in test environment

javascript - Ember.js测试页面不断自动刷新

java - 如何使用参数模拟 jdbcTemplate.query (Object[]{})

c# - 在不重新创建菜单的情况下在 C# 中动态过滤菜单 (ContextMenuStrip)?

c# - 使用 GuidRepresentation.Standard GuidSerializer 执行查询时 MongoDB C# 驱动程序出现问题

c# - 使用 Mono Compiler/创建一个新的同时仍然输出 Windows EXE?

C# 从中心裁剪图像