运行 xUnit 中程序集加载的代码

Running code on assembly load in xUnit

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

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

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

我还在 xUnit GitHub pages 上询问过 - 绝对没有汇编级初始化程序。

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

我正在回答我自己的问题,因为几周来我一直在努力解决这个问题,并最终找到了一个可行的解决方案。

这是一个名为 Module Initializer. There's a NuGet 的第三方独立软件包,使用起来很简单:在您的项目中安装该软件包,安装脚本将创建一个名为 ModulerInitializer.cs 的文件。它还会向项目文件添加 post-build 步骤,这会将 ModuleInitializer.Run() 中的代码注入模块初始化程序。这是 "guaranteed to run before any other code in the module runs, before any type initializers, static constructors or any other initialization code".

在实践中,这意味着您所要做的就是安装软件包并编写安装代码——这真的再简单不过了。感谢所有参与者。


还有一个很有前途的库叫Fody.ModuleInit。然而,这是一个用于更复杂的装配编织库的插件——在我的例子中,更简单的解决方案更合适。