2010-09-20 46 views
4

我正在构建一个WCF服务,它接收外部IP上的请求并将它们转换为通过NServiceBus发送的消息。我如何测试NServiceBus.Configure.WithWeb()?

我的一个单元测试调用Global.Application_Start(),它执行应用程序的配置,然后尝试将Web服务解析为 ,验证容器是否可以构建所有依赖关系。

当我用我的窗口服务Configure.With()这工作得很好,但 调用Configure.WithWeb()在这种情况下(大概是因为“bin”的 目录不存在?)失败。

是否可以单元测试调用Configure.WithWeb()的方法,或者我应该使用Configure.With()的过载来获取目录名称?

+0

取决于你想要得到多么复杂,但是你可以在通话周围包装一个通用BootStrapper接口/类,并根据当前上下文将其交换出去。 – 2010-09-20 16:39:07

+0

我遇到了同样的问题。我得到的异常是这样的:ArgumentNullException at System.IO.DirectoryInfo..ctor(String path) at Configure.cs中的NServiceBus.Configure.GetAssembliesInDirectoryWithExtension(String path,String extension,String [] assembliesToSkip):line 226 at NServiceBus.Configure。 d__7.MoveNext()在Configure.cs中:第217行 – ssmith 2010-12-19 16:20:09

回答

0

我创建了一个新的启动类,像这样:

public class NonWebRunAtStartup : IRunAtStartup 
{ 
    public void InitializeInfrastructure(object container) 
    { 
     Configure.With() 
      .StructureMapBuilder((IContainer) container) 
      .Log4Net() 
      .XmlSerializer() 
      .MsmqTransport() 
      .UnicastBus() 
      .LoadMessageHandlers() 
      .CreateBus() 
      .Start(); 
    } 
} 

然后在我的测试中,我保证,我的IOC容器会使用这个而不是通常的以网络为基础,加入这我的测试之一:

IoC.Register<IRunAtStartup, NonWebRunAtStartup>(); 

这让我到一个不同的错误,我还在与战斗,我会问作为一个单独的问题(现在NSB无法加载组件是在NServiceBus.Core.dll,例如作为Antlr3.Runtime.dll)。

+0

这是我最终决定的相同解决方案;因为我试图测试实际的启动,所以创建一个单独的启动方法没有什么意义,其中测试是唯一被调用的地方。 – arootbeer 2010-12-20 03:21:37

+0

是的,我同意重复不理想。不幸的是,这是我能想到的最好的(只要两个启动类保持同步,但它是一个手动过程) – ssmith 2011-01-19 15:09:12