Unit testing 如何明确指定视图的位置?
首先,我知道问题是什么,我只是不太了解南希,不知道如何解决它 作为appharbor构建过程的一部分,我有一个单元测试失败。同样的测试在NCrunch执行时也会失败。但是,当VS2012执行时,它运行良好 测试如下所示:Unit testing 如何明确指定视图的位置?,unit-testing,nunit,appharbor,nancy,Unit Testing,Nunit,Appharbor,Nancy,首先,我知道问题是什么,我只是不太了解南希,不知道如何解决它 作为appharbor构建过程的一部分,我有一个单元测试失败。同样的测试在NCrunch执行时也会失败。但是,当VS2012执行时,它运行良好 测试如下所示: [Test] public void Get_Root_Should_Return_Status_OK() { // Given var browser = new Browser(new Bootstrapper()); // When va
[Test]
public void Get_Root_Should_Return_Status_OK()
{
// Given
var browser = new Browser(new Bootstrapper());
// When
var result = browser.Get("/");
// Then
Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
}
Get["/"] = _ => View["home.sshtml"];
处理“/”
路径的HomeModule部件如下所示:
[Test]
public void Get_Root_Should_Return_Status_OK()
{
// Given
var browser = new Browser(new Bootstrapper());
// When
var result = browser.Get("/");
// Then
Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
}
Get["/"] = _ => View["home.sshtml"];
home.sshtml
位于视图文件夹中
如果我将上述内容替换为:
Get["/"] = _ => "Hello World!;
然后测试变成绿色
很明显,问题是在NCrunch和appharbor中运行测试时,找不到home.sshtml
文件
我如何明确地告诉Nancy文件在哪里
PS正在将视图文件复制到输出目录
PPS我也试着明确告诉Nancy视图的位置,但这也不起作用
protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
{
var directoryInfo = new FileInfo(Assembly.GetExecutingAssembly().Location).Directory;
if (directoryInfo != null)
Environment.CurrentDirectory = directoryInfo.FullName;
Conventions.ViewLocationConventions.Add((viewName, model, viewLocationContext) => String.Concat("Views/", viewName));
}
问题的原因是,NCrunch编译并复制bin目录以运行测试时,没有将视图复制到输出目录 您需要做的是将视图设置为始终复制,然后在单元测试项目中添加IRootPathProvider实现:
public class StaticPathProvider : IRootPathProvider
{
public static string Path { get; set; }
public string GetRootPath()
{
return Path;
}
}
(在路径上不完全确定,我不记得了,我想这只是执行程序集所在的位置)
并在您的引导程序中注册以进行单元测试
var browserParser = new Browser(with =>
{
...
with.RootPathProvider<StaticPathProvider>();
...
});
var-browserParser=新浏览器(使用=>
{
...
使用.RootPathProvider();
...
});
缺点是部署时需要从/bin
目录中删除视图目录
另一种方法是做你已经做过的事情,嵌入你的视图 我想Bootstrapper是你主要项目中的Bootstrapper?里面有什么东西可以打破它吗?您是将sshtml文件用作嵌入式资源,还是只是正常使用?你不应该在应用程序启动中需要mods,所以我相信会有一些简单的事情发生。Pop by我已将视图嵌入到部件中作为解决方案。现在到处都能通过考试。