0

在对 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

但仍然无法正常工作。

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

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

谢谢

阿德马尔

4

1 回答 1

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();
        });

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

于 2013-02-10T17:39:16.007 回答