[英]mvc3 unit testing best practice using serialize viewresult
I am looking into the best ways to unit test my MVC 3 controllers. 我正在研究对MVC 3控制器进行单元测试的最佳方法。 I was thinking of taking the result of viewresult on executing the controller action with a bunch of different params, serializing it and saving to file as a base for future tests.
我正在考虑将viewresult的结果用于使用一系列不同的参数执行控制器操作,对其进行序列化并保存到文件中,以作为将来测试的基础。
2 questions: 2个问题:
//create viewresult to return to view
ActionResult viewResult = View(dv);
//save viewresult for future unit test comparisons.
//Save data as name of controller action and param value used
string fileName = logDir + "\\" + controllerActionName + tradeDate.ToString("MMddyyyy") + ".viewresult";
//serialze and save to file
System.IO.Stream stream = System.IO.File.Open(fileName,System.IO.FileMode.Create);
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
bFormatter.Serialize(stream, viewResult);
stream.Close();
//send viewresult to mvc3 view
return viewResult;
The easiest way to test your controller actions is to examine the view model. 测试控制器动作的最简单方法是检查视图模型。 You really should not need to be writing things out to files etc.
您确实不需要将内容写到文件等中。
YOu can just do something like 你可以做类似的事情
Given an action of: 采取以下行动:
public ViewResult AddNewDocument(int documentFolderId)
{
var documentFolder = documentFolderRepository.Get(documentFolderId);
return View("AddNewDocument",
new AddNewDocumentView { DocumentFolderId = documentFolder.Id, DocumentFolderName = documentFolder.Name });
}
Write a unit test of (in mspec though the same holds true of NUnit or MSTest: 编写一个单元测试(在mspec中,尽管NUnit或MSTest同样适用:
public class when_AddNewDocument_GET_is_requested : given_a_DocumentController
{
Because of = () => result = documentController.AddNewDocument(documentFolderId);
It should_return_a_view_result_with_the_view_name_AddDocument = () => result.ViewName.ShouldEqual("AddNewDocument");
It should_have_a_view_model_of_type_AddNewDocumentView = () => result.ViewData.Model.ShouldBeOfType<AddNewDocumentView>();
It should_have_return_document_folder_id_in_view_model = () => ((AddNewDocumentView)result.ViewData.Model).DocumentFolderId.ShouldEqual(documentFolderId);
It should_have_return_document_folder_name_in_view_model = () => ((AddNewDocumentView)result.ViewData.Model).DocumentFolderName.ShouldEqual(documentFolderName);
static ViewResult result;
}
The point is the viewmodel that you pass to the view contains all the data you need to test. 关键是传递给视图的视图模型包含需要测试的所有数据。 This can be grabbed directly from result.ViewData.Model.
可以直接从result.ViewData.Model中获取。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.