在测试ASP.NET MVC 2应用程序时,如果无法找到视图,我遇到了问题。
查看代码,我意识到视图的aspx文件尚未添加到源代码控制库中。在这个项目中,我们使用StarTeam进行源代码控制非常容易,而且在签入时它不显示新的文件夹。这个视图用于新的控制器,因此为它创建了一个新文件夹,因此错过了。< / p>
我们的构建服务器(使用Hudson / MSBuild)没有注意到这一点,因为代码仍然可以在缺少aspx文件的情况下正常构建。我们的控制器单元测试ActionResults,它显然仍然在没有视图的情况下通过。
这在系统测试中得到了提升,但我如何才能更早地捕获它(理想情况是在构建服务器上)。
提前致谢
答案 0 :(得分:2)
您可以编写测试实际视图的单元测试,然后如果单元测试未在构建服务器上传递,则表示您遇到了问题。为此,您可以使用如下框架:
http://blog.stevensanderson.com/2009/06/11/integration-testing-your-aspnet-mvc-application/
有了这个,您可以编写单元测试(如帖子)
[Test]
public void Root_Url_Renders_Index_View()
{
appHost.SimulateBrowsingSession(browsingSession => {
// Request the root URL
RequestResult result = browsingSession.ProcessRequest("/");
// You can make assertions about the ActionResult...
var viewResult = (ViewResult) result.ActionExecutedContext.Result;
Assert.AreEqual("Index", viewResult.ViewName);
Assert.AreEqual("Welcome to ASP.NET MVC!", viewResult.ViewData["Message"]);
// ... or you can make assertions about the rendered HTML
Assert.IsTrue(result.ResponseText.Contains("<!DOCTYPE html"));
});
}
答案 1 :(得分:1)
您正在运行什么版本的StarTeam?在选定项目/视图中的StarTeam 2008(不确定何时首次添加此功能)中,您可以从菜单Folder Tree->Show Not-In-View Folders
中进行选择。这将显示您在本地磁盘上尚未添加到项目中的文件夹(它们将显示为文件夹图标为白色)。
答案 2 :(得分:0)
这是一个老问题,但如果有人仍然在寻找这个,你应该尝试SpecsFor.Mvc by Matt Honeycutt。
它不仅可用于确保在源代码管理中正确包含/添加Views
,它甚至可以进行集成测试以确保Views
有效。
链接到其网站:http://specsfor.com/SpecsForMvc/default.cshtml
链接到nuget包:https://www.nuget.org/packages/SpecsFor.Mvc/
链接到github:https://github.com/MattHoneycutt/SpecsFor
以下是从网站上获取的代码段,其中显示了如何使用它。
public class UserRegistrationSpecs
{
public class when_a_new_user_registers : SpecsFor<MvcWebApp>
{
protected override void Given()
{
SUT.NavigateTo<AccountController>(c => c.Register());
}
protected override void When()
{
SUT.FindFormFor<RegisterModel>()
.Field(m => m.Email).SetValueTo("test@user.com")
.Field(m => m.UserName).SetValueTo("Test User")
.Field(m => m.Password).SetValueTo("P@ssword!")
.Field(m => m.ConfirmPassword).SetValueTo("P@ssword!")
.Submit();
}
[Test]
public void then_it_redirects_to_the_home_page()
{
SUT.Route.ShouldMapTo<HomeController>(c => c.Index());
}
[Test]
public void then_it_sends_the_user_an_email()
{
SUT.Mailbox().MailMessages.Count().ShouldEqual(1);
}
[Test]
public void then_it_sends_to_the_right_address()
{
SUT.Mailbox().MailMessages[0].To[0].Address.ShouldEqual("test@user.com");
}
[Test]
public void then_it_comes_from_the_expected_address()
{
SUT.Mailbox().MailMessages[0].From.Address.ShouldEqual("registration@specsfor.com");
}
}
}