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

本文关键字:加载 代码 程序集 运行 xUnit | 更新日期: 2023-09-27 17:54:28

我使用Effort库作为模拟数据库,并且它有一些初始化代码必须在汇编加载上运行。

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

这里有一个类似问题的答案,提到了AssemblyInitialize属性,但这不适用于xUnit——xUnit没有办法在汇编加载时运行代码。

我还在xUnit的GitHub页面上问过——肯定没有汇编级初始化器。

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

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

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

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

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


还有一个看起来很有前途的库叫做Fody.ModuleInit。然而,这是一个更复杂的汇编编织库的插件-在我的情况下,更简单的解决方案更合适。