Nunit 测试通过Nuget安装的Ninject项目-WebActivate行为

Nunit 测试通过Nuget安装的Ninject项目-WebActivate行为,nunit,nuget-package,ninject.web.mvc,webactivator,Nunit,Nuget Package,Ninject.web.mvc,Webactivator,我正在尝试为使用Ninject的项目创建NUnit测试。Ninject是通过Nuget安装的,因此配置clas与此简化版本类似: 我希望在我的启动测试类中调用这些方法。我试过: 它将不起作用,因为我试图手动调用WebActivator管理的方法。因此,我正在寻找一种方法来指导WebActivator在“正确的时间”调用这些方法。让我提醒您,我正在处理两个项目,一个是MVC Web项目(它对Ninject使用WebActivator),另一个是我的MVC Web项目的测试项目。我试图通过更改安

我正在尝试为使用Ninject的项目创建NUnit测试。Ninject是通过Nuget安装的,因此配置clas与此简化版本类似:

我希望在我的启动测试类中调用这些方法。我试过:

它将不起作用,因为我试图手动调用WebActivator管理的方法。因此,我正在寻找一种方法来指导WebActivator在“正确的时间”调用这些方法。让我提醒您,我正在处理两个项目,一个是MVC Web项目(它对Ninject使用WebActivator),另一个是我的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,因为它在asp.net之外不会发挥很好的作用

如果您想测试Ninject内核的设置,我会将CreateKernel()方法公开,并从setup()方法调用它


我会避免在测试项目中使用WebActivator,因为它在asp.net之外无法正常运行

如果您想测试Ninject内核的设置,我会将CreateKernel()方法公开,并从setup()方法调用它


不幸的是,默认情况下WebActivator在c:\tmp中查找“*.dll”。。。目录,因此无法找到解决方案中包含的项目库

最后,我获取了源代码并向ActivationManager类添加了以下代码:

public static void AddAssembly(Assembly assembly)
{
    if (_assemblies == null)
    {
        _assemblies = new List<Assembly>();
    }
    _assemblies.Add(assembly);
}

这是一段难看的代码,我希望有一天能看到更好的方法。

不幸的是,默认情况下WebActivator在c:\tmp中查找“*.dll”。。。目录,因此无法找到解决方案中包含的项目库

最后,我获取了源代码并向ActivationManager类添加了以下代码:

public static void AddAssembly(Assembly assembly)
{
    if (_assemblies == null)
    {
        _assemblies = new List<Assembly>();
    }
    _assemblies.Add(assembly);
}

这是一段难看的代码,我希望有一天能看到更好的方法。

谢谢你的评论,但想法是使用WebActivator,因为很多Nuget软件包都使用它,知道如何开箱测试也很好。谢谢你的评论,但想法是使用WebActivator,因为很多Nuget软件包都使用它,知道如何进行开箱即用的测试是很好的。
public static IKernel CreateKernel()
[SetUp]
public void Setup()
{
    NinjectMVC3.CreateKernel();
}
public static void AddAssembly(Assembly assembly)
{
    if (_assemblies == null)
    {
        _assemblies = new List<Assembly>();
    }
    _assemblies.Add(assembly);
}
 private const int PreStartInitStage_DuringPreStartInit = 1;
    [SetUp]
    public void Setup(){
        WebActivator.ActivationManager.AddAssembly(Assembly.GetAssembly(typeof(NinjectMVC3)));
        typeof(BuildManager).GetProperty("PreStartInitStage", BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, PreStartInitStage_DuringPreStartInit, null);
        WebActivator.ActivationManager.RunPreStartMethods();
        Kernel = NinjectMVC3.GetKernel();
    }