Unit testing 为什么';t`DefaultNancyBoostTrapper`找到我的NancyModule
我刚刚在南希身上湿透了。我真的很兴奋能在维基上看到测试过程,但是当我尝试下面的方法时,我无法让它工作,首先通过测试 使用VS2010Unit 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测
空ASP.NET Web应用程序项目
:Notify.App安装程序包Nancy.Hosting.AspNet
类库
项目:Notify.UnitTests安装软件包。测试
安装软件包XUnit
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*程序集的内容来解决此问题。