我的项目都使用StructureMap作为容器/ IoC。我在存储库模式等方面利用它。在我的单元测试项目中,我已经在有意义的时候实现了测试存储库。为了使结构图知道要使用的具体实现,我需要初始化容器并运行类型的注册。我正在寻找一个在单元测试项目中调用IoC.Initialize()的地方。在单元测试之外,例如,在Web项目中,我可以从Global.asax初始化我的IoC容器/注册。我正在寻找一个相当于Global.asax的单元测试(例如静态void main,一种连接到单元测试的主要启动事件入口点的方法)。我已经通过使用基类进行所有测试并在那里进行初始化来解决这个问题,因此任何运行的测试最终会初始化IoC容器,如果它尚未初始化...但它是非常黑客的恕我直言,所以我正在寻找一种更清洁的方式。
有什么建议吗?
UPDATE / ANSWER
以下是我根据马修的回应实施的解决方案。
<TestClass()>
Public Module Main
Public Property TestContext As TestContext
<AssemblyInitialize()>
Public Sub Initialize(_TestContext As TestContext)
TestContext = _TestContext
IoC.Initialize()
End Sub
End Module
答案 0 :(得分:11)
您可能正在寻找AssemblyInitializeAttribute
。您可以在程序集的类中使用它来装饰一个方法,它将在该程序集中的任何测试运行之前运行一次。