3

我不知道为什么会抛出这个异常......我有一个单元测试:

[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 基类中引发,并带有跟踪堆栈跟踪

System.InvalidOperationException : 序列包含多个元素

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
4

3 回答 3

1

我在 Nancy 0.16.1 的新测试程序集中看到了这一点,该程序集引用了 Nancy、Nancy.Testing 和包含我的模块的主服务程序集的项目引用(在 VS2010 中)。

服务程序集引用 Nancy.Hosting.Self。

测试程序集的构建将 Nancy.Hosting.Self.dll 拉入构建文件夹,测试失败并出现您描述的错误。

手动从构建文件夹中删除 Hosting dll 可以解决错误并且测试变为绿色,例如删除MyTests\bin\Debug\Nancy.Hosting.Self.dll

于 2013-06-03T11:28:48.413 回答
1

在使用引用 Nancy.Hosting.Self 的项目进行测试时,我也遇到了同样的情况。

我的解决方法是创建一个 CustomBootstrapper 并覆盖 RootPathProvider 属性。

    class TestBootStrapper : DefaultNancyBootstrapper{
    protected override IRootPathProvider RootPathProvider {
        get {
            return new FakeRootPathProvider();
        }
    }
}
于 2013-06-05T07:35:51.573 回答
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 中的输出文件夹:

  • 在测试的项目中找到 Nancy.Hosting.Self 引用。
  • 右键单击引用并选择“属性”。
  • 复制本地设置为false
  • 清理并重建您的解决方案。

这为我解决了这个问题。我会将此作为对克里斯回答的评论发布,但由于这是我的第一篇文章,我只能发布答案。

于 2013-06-25T08:48:49.560 回答