我无法弄清楚为什么这个例外被抛出...... 我有一个单元测试:
[Test]
public void Should_return_status_ok_when_route_exists()
{
// Given
var bootstrapper = new DefaultNancyBootstrapper();
var browser = new Browser(bootstrapper);
// When
var result = browser.Get("/", with =>
{
with.HttpRequest();
});
// Then
Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
}
当浏览器变量被分配时,异常抛出Nancy Bootstrapper Base类并跟随堆栈跟踪
System.InvalidOperationException:Sequence包含多个元素
at System.Linq.Enumerable.SingleOrDefault(IEnumerable`1 source)
at Nancy.Bootstrapper.NancyBootstrapperBase`1.GetRootPathProvider() in NancyBootstrapperBase.cs: line 558
at Nancy.Bootstrapper.NancyBootstrapperBase`1.get_RootPathProvider() in NancyBootstrapperBase.cs: line 172
at Nancy.Bootstrapper.NancyBootstrapperBase`1.GetAdditionalInstances() in NancyBootstrapperBase.cs: line 514
at Nancy.Bootstrapper.NancyBootstrapperBase`1.Initialise() in NancyBootstrapperBase.cs: line 242
at Nancy.Testing.Browser..ctor(INancyBootstrapper bootstrapper) in Browser.cs: line 39
at Tests.Tests.Should_return_status_ok_when_route_exists() in Tests.cs: line 34
答案 0 :(得分:1)
我在Nancy 0.16.1上看到了一个新的测试程序集,该程序集将Nancy,Nancy.Testing和项目引用(在VS2010中)引用到包含我的模块的主服务程序集。
服务程序集引用Nancy.Hosting.Self。
测试程序集的构建将Nancy.Hosting.Self.dll拉入构建文件夹,测试因您描述的错误而失败。
手动从构建文件夹中删除主机dll可解决错误,并且测试变为绿色,例如删除MyTests\bin\Debug\Nancy.Hosting.Self.dll
答案 1 :(得分:1)
在使用引用Nancy.Hosting.Self的项目进行测试时,我也遇到了同样的问题。
我的解决方法是创建一个CustomBootstrapper并覆盖RootPathProvider属性。
class TestBootStrapper : DefaultNancyBootstrapper{
protected override IRootPathProvider RootPathProvider {
get {
return new FakeRootPathProvider();
}
}
}
答案 2 :(得分:1)
我最近遇到了同样的问题。我试图像这样解决Nancy模块来测试我的引导程序:
[Test]
public void PushModule_Is_Resolvable()
{
var pushModule = mUnderTest.GetModule(typeof (PushModule), new NancyContext());
Assert.That(pushModule, Is.Not.Null);
}
这产生了问题中描述的例外情况。在阅读了Chris的回答之后,我只是将dll配置为不会被复制到Visual Studio中的输出文件夹中:
这解决了我的问题。 我会发布这个作为对Chris回答的评论,但由于这是我的第一篇文章,我只能发帖回答。