我使用Effort库作为模拟数据库,它有一些必须在程序集加载时运行的初始化代码。
我尝试在静态构造函数中添加此初始化代码,该构造函数通过基类构造函数从每个测试中引用,但这不符合库的要求。
对类似问题here的回答提到AssemblyInitialize
属性,但这不适用于xUnit - xUnit无法在程序集加载时运行代码。
我还问过xUnit GitHub pages - 确实没有汇编级初始化程序。
如何在xUnit中运行我需要的初始化代码?
答案 0 :(得分:9)
我正在回答我自己的问题,因为我一直在努力解决这个问题,并且最终找到了一个有效的解决方案。
这是一个名为Module Initializer的第三方独立包。有一个NuGet包很容易使用:在项目中安装包,安装脚本将创建一个名为ModulerInitializer.cs
的文件。它还将为项目文件添加一个构建后的步骤,该步骤将ModuleInitializer.Run()
中的代码注入模块初始化程序。这“保证在模块中的任何其他代码运行之前运行,在任何类型初始化器,静态构造函数或任何其他初始化代码之前运行”。
在实践中,这意味着您所要做的就是安装软件包并编写设置代码 - 它实际上不是更简单。感谢所有参与者。
还有一个名为Fody.ModuleInit的有前途的图书馆。但是,这是一个更复杂的装配编织库的插件 - 在我看来,更简单的解决方案更合适。