我想为使用Ninject的项目创建一个NUnit测试。该Ninject经的NuGet安装,所以配置CLAS类似于此简化版本:
测试通过Nuget安装Ninject项目 - WebActivate行为
[assembly: WebActivator.PreApplicationStartMethod(typeof(NinjectMVC3), "Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(NinjectMVC3), "Stop")]
public static class NinjectMVC3
{
private static readonly Bootstrapper Bootstrapper = new Bootstrapper();
private static IKernel _kernel;
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule));
Bootstrapper.Initialize(CreateKernel);
}
public static void Stop()
{
Bootstrapper.ShutDown();
}
}
我想在我的启动测试类被称为那些方法。我想:
[TestFixture]
public class TestBase
{
[SetUp]
public void Setup()
{
NinjectMVC3.Startup();
}
[TearDown]
public void TearDown()
{
NinjectMVC3.TearDown();
}
}
它不会工作,因为我想手动调用由WebActivator管理方法。所以我正在寻找一种方法来指示WebActivator在“正确的时间”调用这些方法。让我提醒你,我正在处理两个项目,一个是MVC Web项目(它使用WebActivator for Ninject),另一个是我的MVC Web项目的测试项目。我试图改变我的设置方法的实现调用WebActivator:
[SetUp]
public void Setup()
{
WebActivator.ActivationManager.Run();
}
它不工作。据我了解下面这个调用WebActivator应该做类似的东西:
foreach (var assemblyFile in Directory.GetFiles(HttpRuntime.BinDirectory, "*.dll")) {
var assembly = Assembly.LoadFrom(assemblyFile);
foreach (PreApplicationStartMethodAttribute preStartAttrib in assembly.GetCustomAttributes(
typeof(PreApplicationStartMethodAttribute),
inherit: false)) {
preStartAttrib.InvokeMethod();
}
}
所以我想,这是无法找到程序集。所以问题是 - 我如何命令WebActivator通过一些额外的程序集扫描并在“正确的时间”启动一些方法。或者,也许我在这里误导了我,为了测试我的Ninject项目,我应该采取不同的方法?
我能够测试我没有WebActivator的解决方案,但由于它最近被广泛使用,我渴望学习如何处理它并迫使它做我想做的事情。
感谢您的评论,但我们的想法是使用WebActivator,因为许多Nuget软件包都使用它,并且知道如何开箱即可测试它是很好的。 – 2012-01-09 10:21:21