gpt4 book ai didi

asp.net-mvc-3 - 使用序列化 View 结果的 mvc3 单元测试最佳实践

转载 作者:行者123 更新时间:2023-11-28 20:57:14 25 4
gpt4 key购买 nike

我正在寻找对我的 MVC 3 Controller 进行单元测试的最佳方法。我正在考虑使用 viewresult 的结果来执行带有一堆不同参数的 Controller 操作,将其序列化并保存到文件中作为 future 测试的基础。

2个问题:

  1. 这是个坏主意吗?对于先前的应用程序,这似乎是检查更改是否未破坏任何内容的最安全方法之一。我可以反序列化存储的结果,进行任何必要的更改,然后与实时结果进行比较。
  2. 如果这是一种很好的测试方法,我该如何序列化 View 结果?在下面的代码中,我收到无法序列化 ActionResult 的错误。
//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;

最佳答案

测试 Controller 操作的最简单方法是检查 View 模型。您真的不需要将内容写入文件等。

你可以做类似的事情

给定一个 Action :

public ViewResult AddNewDocument(int documentFolderId)
{
var documentFolder = documentFolderRepository.Get(documentFolderId);

return View("AddNewDocument",
new AddNewDocumentView { DocumentFolderId = documentFolder.Id, DocumentFolderName = documentFolder.Name });
}

编写单元测试(在 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;
}

重点是您传递给 View 的 View 模型包含您需要测试的所有数据。这可以直接从 result.ViewData.Model 中获取。

关于asp.net-mvc-3 - 使用序列化 View 结果的 mvc3 单元测试最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11102357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com