Unit testing 为什么';t`DefaultNancyBoostTrapper`找到我的NancyModule

Unit testing 为什么';t`DefaultNancyBoostTrapper`找到我的NancyModule,unit-testing,nancy,Unit Testing,Nancy,我刚刚在南希身上湿透了。我真的很兴奋能在维基上看到测试过程,但是当我尝试下面的方法时,我无法让它工作,首先通过测试 使用VS2010 已创建空ASP.NET Web应用程序项目:Notify.App 安装程序包Nancy.Hosting.AspNet 创建的简单模块如下所示:NotifyModule 已创建类库项目:Notify.UnitTests 安装软件包。测试 安装软件包XUnit 创建了简单的第一个测试:BaseUrlSpec.cs 使用DefaultNancyBootstrapper测

我刚刚在南希身上湿透了。我真的很兴奋能在维基上看到测试过程,但是当我尝试下面的方法时,我无法让它工作,首先通过测试

使用VS2010

  • 已创建
    空ASP.NET Web应用程序项目
    :Notify.App
  • 安装程序包Nancy.Hosting.AspNet
  • 创建的简单模块如下所示:NotifyModule
  • 已创建
    类库
    项目:Notify.UnitTests
  • 安装软件包。测试
  • 安装软件包XUnit
  • 创建了简单的第一个测试:BaseUrlSpec.cs
  • 使用
    DefaultNancyBootstrapper
    测试失败,出现
    HttpStatusCode.NotFound

    如果我将
    引导程序定义替换为:

    var bootstrapper=新的ConfigurableBootstrapper(
    with=>
    使用.Module());
    
    然后测试通过。我不明白为什么使用DefaultNancyBootstrapper的SDHP不能工作?是我做错了什么让它破裂,还是我的理解中遗漏了细节


    通知模块

    使用Nancy;
    公共类NotifyModule:NancyModule{
    公共模块(){
    获取[“/”]=\u=>HttpStatusCode.OK;
    }
    }
    
    基本规范

    使用Nancy;
    使用Nancy测试;
    使用Notify.App;
    使用Xunit;
    公共类BaseUrlSpec
    {
    [事实]
    公共空间应响应OK()
    {
    var bootstrapper=newdefaultnancyboosttrapper();
    var app=新浏览器(引导程序);
    var response=app.Get(“/”,with=>with.HttpRequest());
    var statusCode=response.statusCode;
    Assert.Equal(HttpStatusCode.OK,statusCode);
    }
    }
    
    您需要确保包含路线的程序集已加载。从程序集中引用类型可以确保这一点,因此使用可配置引导程序的版本可以工作。
    要使另一个工作,只需从程序集中添加对某个类型的引用。不需要实例化它

    克里斯汀是对的。这是一个.NET的东西,不是Nancy的东西。如果要在测试中执行
    var foo=typeof(NotifyModule)
    ,那么它将通过
    DefaultNancyBootstrapper
    ,但是,在0.17中,我们尝试通过加载引用程序集的所有程序集来解决此问题,仅将我的应用程序作为单元测试库中的“引用”之一并不会导致Nancy选择它。不,程序集引用是不够的。你的代码中需要一个引用,这与Nancy无关。在某些情况下,.net编译器将尝试智能化,不在程序集清单中包含具有未使用类型的程序集。如果要使用此.GetType().assembly.GetReferenceAssemblys()检查测试项目程序集,则不会看到包含模块的程序集(除非明确使用了该类型)。在0.17中,我们尝试通过在\bin中加载所有引用Nancy*程序集的内容来解决此问题。