C# 南希测试项目可以';我找不到风景
在尝试从测试项目中测试模块时遇到了一些绊脚石。我的测试代码看起来非常标准:C# 南希测试项目可以';我找不到风景,c#,unit-testing,nancy,C#,Unit Testing,Nancy,在尝试从测试项目中测试模块时遇到了一些绊脚石。我的测试代码看起来非常标准: [TestMethod] public void Should_return_status_ok_when_route_exists() { // Given var bootstrapper = new DefaultNancyBootstrapper(); var browser = new Browser(bootstrapper); // When var result
[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);
}
当我的模块尝试渲染视图时,出现“找不到视图”异常。如果我正常运行项目,模块会找到视图。只有在从测试项目调用时,模块才会找不到它。问题在于,视图没有靠近测试项目,而且由于IRootPathProvider指向错误的位置,因此无法找到它们。解决这个问题的两种方法是使用ConfigurableBootstrapper(它与默认的差不多,但在初始化时可以覆盖内容),并告诉它使用自定义根路径提供程序
var bootstrapper = new ConfigurableBootstrapper(with => {
with.RootPathProvider<CustomRootPathProvider>();
});
var bootstrapper=新的ConfigurableBootstrapper(带=>{
使用.RootPathProvider();
});
然后实现公共类CustomRootPathProvider:IRootPathProvider
,并将其指向正确的位置
第二种解决方案是将视图设置为始终复制到输出目录,我认为这也可以解决此问题。请注意,您需要在测试项目中安装正确的视图引擎。例如,如果没有安装Razor视图引擎,将无法找到cshtml视图。另外,请看一下IRootPathProvider的这个漂亮实现:通过将我的视图设置为“始终复制”,我可以通过简单的测试。甚至不需要实现根路径提供程序。谢谢