【问题标题】:Running code on assembly load in xUnit在 xUnit 中运行程序集加载代码
【发布时间】:2015-06-09 11:03:56
【问题描述】:

我使用Effort 库作为模拟数据库,它有一些初始化代码必须在程序集加载时运行。

我尝试在静态构造函数中添加此初始化代码,该构造函数通过基类构造函数从每个测试中引用,但这不符合库的要求。

类似问题here 的答案提到了AssemblyInitialize 属性,但这不适用于xUnit - xUnit 无法在程序集加载时运行代码。

我还在xUnit GitHub pages 上问过——肯定没有汇编级初始化程序。

如何在 xUnit 中运行我需要的初始化代码?

【问题讨论】:

  • 静态构造函数到底缺少多少?
  • @OhadSchneider 那是六年前的事了,所以我的记忆很模糊!我记得,对于 Effort,静态构造函数调用得不够早。我已经很多年没有使用 Effort 了,所以情况可能已经改变了

标签: c# xunit xunit.net


【解决方案1】:

我正在回答我自己的问题,因为我已经尝试解决这个问题好几个星期了,终于找到了一个可行的解决方案。

这是一个名为Module Initializer 的第三方独立包。有一个使用简单的NuGet 包:在您的项目中安装该包,安装脚本将创建一个名为ModulerInitializer.cs 的文件。它还将在项目文件中添加一个构建后步骤,将ModuleInitializer.Run() 中的代码注入模块初始化程序。这是“保证在模块中的任何其他代码运行之前、在任何类型初始化程序、静态构造函数或任何其他初始化代码之前运行”。

在实践中,这意味着您所要做的就是安装软件包并编写设置代码 - 这真的再简单不过了。向所有相关人员致敬。


还有一个很有前途的库,名为Fody.ModuleInit。然而,这是一个用于更复杂的程序集编织库的插件——在我的情况下,更简单的解决方案更合适。

【讨论】:

  • 似乎最好的前进路线是分叉 xUnit 并添加 MSTest 和 nUnit 中缺少的功能。
  • 遇到了同样的问题,这个解决方案效果很好!
猜你喜欢
  • 2010-10-05
  • 1970-01-01
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多