我想爲使用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