【问题标题】:Getting Cannot access a closed Stream when unit testing Nancy单元测试南希时无法访问封闭的流
【发布时间】:2013-02-18 23:15:45
【问题描述】:

在对 Nancy Web 应用程序进行单元测试时,我收到“无法访问关闭的流”。

我的模块如下:

public class MainModule : NancyModule
{
    public MainModule()
    {
        Get["/{Name}"] = p =>
            {
                var command = this.Bind<MainCommand>();
                return Response.AsJson(command.ExecuteGetMessage());
            };
    }
}

我的测试是:

    [Test]
    public void Should_return_welcome_message()
    {
        // When
        var bootstrapper = new DefaultNancyBootstrapper();
        var browser = new Browser(bootstrapper);

        BrowserResponse browserResponse = browser.Get("/", with =>
            {
                with.HttpRequest();
            });

        Console.WriteLine(browserResponse.StatusCode);
        Console.WriteLine(browserResponse.Body.ToString());

        // Then
        Assert.AreEqual(HttpStatusCode.OK,browserResponse.StatusCode);
    }

更新:我得到 StatusCode = NotFound 并且尝试访问 browserResponse.Body 时发生异常。

我查看了 Nancy 论坛和 StackOverflow。 我试过这个解决方案:Nancy test doesn't find route in other assembly

但仍然无法正常工作。

当我在调试模式下运行测试时,我看到我的模块已被调用,但我仍然无法检查返回值。

我应该怎么做才能让它工作?

谢谢

阿德马尔

【问题讨论】:

  • 你在测试的哪一行得到错误?
  • 嗨@Christian Horsdal,感谢您的回复。我更新了问题。谢谢。

标签: c# unit-testing rest nancy


【解决方案1】:

您收到 NotFound 响应,因为您定义的路由与您调用的路由不同。

您在测试中调用/,但模块的路由为/{Name}

例外是因为没有带有 NotFound 响应的正文。

将您的测试更新为:

var bootstrapper = new ConfigurableBootstrapper(c=>c.Module<MainModule>());
var browser = new Browser(bootstrapper);
BrowserResponse browserResponse = browser.Get("/ademar", with =>
        {
            with.HttpRequest();
        });

* 已更新以包含来自评论的来源 *

【讨论】:

  • 嗨@codeprogression,感谢您的回答。但它并没有解决问题。我试过了,结果是一样的,notfound 和我无法访问关闭的流的错误。
  • 有趣。对于未找到的响应,预期有关已关闭流的错误。您是否在您引用的其他问题中添加了“硬引用”?你可以做var bootstrapper = new ConfigurableBootstrapper(c=&gt;c.Module&lt;MainModule&gt;()); 那只会寻找你正在测试的模块。
  • 我确实做到了,但还是一样。感谢您的回复。我可能会开始另一个项目并检查它是否可以工作。
  • 嗨@codeprogression。它实际上与 var bootstrapper = new ConfigurableBootstrapper(c=>c.Module());感谢您的帮助!
  • 添加为答案,尽管真正的答案在 cmets 中!谢谢!
猜你喜欢
  • 2013-02-21
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多