上下文
这是一个单元测试场景。
测试目标类的方法可以从不同的线程同时调用,因此我没有使用锁来保护记录器实现实例本身,而是选择了一个线程绑定的单例记录器。测试中的方法总是通过服务定位器模式创建线程绑定记录器(请不要劫持关于这是否是反模式的问题)。
Ninject在测试的编配部分编程如下:
kernel.Bind<ILogger>().To<MyLogger>().InThreadScope();
问题
在Act部分测试期间,被测实例(内部)创建一个或多个线程。
在测试的Assert部分,我想访问一个或多个记录器,这些记录器是由被测试类中的线程创建的,并以断言为目的检查记录器。
我该如何完成这项任务? (访问记录器创建的内容)
答案 0 :(得分:1)
Ninject没有为此提供特定的API,但是,您可以使用&#34; OnActivation
&#34;。
将其添加到现有绑定中,或在单元测试中使用Rebind
,如下所示:
kernel.Rebind<ILogger>().To<MyLogger>().OnActivation(createdInstance => ...do something...);
替换&#34; ...做点什么......&#34;使用Action<ILogger>
将实例添加到(并发安全?)列表或类似名称。
另请参阅Intercept creation of instances in Ninject以获取更多信息。