【问题标题】:Nancy testing project can't find viewsNancy 测试项目找不到视图
【发布时间】:2012-05-15 00:43:34
【问题描述】:

尝试从测试项目中测试 Nancy 模块时遇到了一些障碍。我的测试代码看起来很标准:

[TestMethod]
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(result.StatusCode, HttpStatusCode.OK);
}

当我的模块尝试渲染视图时,我得到一个无法定位视图的异常。如果我正常运行项目,模块会找到视图。只有在从测试项目中调用时,模块才找不到它。

【问题讨论】:

    标签: c# unit-testing nancy


    【解决方案1】:

    问题是视图不在您的测试项目附近,并且由于 IRootPathProvider 指向错误的位置,它无法找到它们。解决这个问题的两种方法是使用 ConfigurableBootstrapper (它或多或少与默认的相同,但在初始化时可以覆盖东西)并告诉它使用您的自定义根路径提供程序

    var bootstrapper = new ConfigurableBootstrapper(with => {
        with.RootPathProvider<CustomRootPathProvider>();
    });
    

    然后您将实现 public class CustomRootPathProvider : IRootPathProvider 并将其指向正确的位置。

    第二种解决方案是将您的视图设置为始终复制到输出目录,我相信也应该解决它

    【讨论】:

    • 另外请注意,您需要在测试项目中安装正确的视图引擎。例如,如果没有安装 Razor 视图引擎,将找不到 cshtml 视图。
    • 还可以看看 IRootPathProvider 的这个不错的实现:jefclaes.be/2012/06/making-my-first-nancyfx-test-pass.html
    • 通过将视图设置为“始终复制”,我能够通过简单的测试。甚至不需要实现根路径提供程序。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 2016-07-21
    • 1970-01-01
    相关资源
    最近更新 更多