Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 使用序列化viewresult的mvc3单元测试最佳实践_Asp.net Mvc 3_Testing_Serialization_Viewresult - Fatal编程技术网

Asp.net mvc 3 使用序列化viewresult的mvc3单元测试最佳实践

Asp.net mvc 3 使用序列化viewresult的mvc3单元测试最佳实践,asp.net-mvc-3,testing,serialization,viewresult,Asp.net Mvc 3,Testing,Serialization,Viewresult,我正在寻找对MVC3控制器进行单元测试的最佳方法。 我正在考虑在使用一组不同的参数执行控制器操作时获取viewresult的结果,将其序列化并保存到文件中,作为将来测试的基础 2个问题: 这是个坏主意吗?对于以前的应用程序,这似乎是检查更改是否未破坏任何内容的最安全方法之一。我可以反序列化存储的结果,进行任何必要的更改,然后与实时结果进行比较 如果这是一种很好的测试方法,如何序列化viewresult?在下面的代码中,我得到一个错误,ActionResult无法序列化 测试控制器操作的最简单方法

我正在寻找对MVC3控制器进行单元测试的最佳方法。 我正在考虑在使用一组不同的参数执行控制器操作时获取viewresult的结果,将其序列化并保存到文件中,作为将来测试的基础

2个问题:

  • 这是个坏主意吗?对于以前的应用程序,这似乎是检查更改是否未破坏任何内容的最安全方法之一。我可以反序列化存储的结果,进行任何必要的更改,然后与实时结果进行比较
  • 如果这是一种很好的测试方法,如何序列化viewresult?在下面的代码中,我得到一个错误,ActionResult无法序列化

  • 测试控制器操作的最简单方法是检查视图模型。 您真的不需要将内容写入文件等

    你可以这样做

    鉴于以下行为:

    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;
    }
    
    请求添加新文档时的公共类:给定文档控制器 { 因为=()=>result=documentController.AddNewDocument(documentFolderId); 它应该返回一个带有视图名称的视图结果,AddDocument=()=>result.ViewName.ShouldEqual(“AddNewDocument”); 它应该具有类型为的视图模型,添加新文档视图=()=>result.ViewData.model.ShouldBeOfType(); 它应该在视图中有返回文档文件夹id(模型=()=>((AddNewDocumentView)result.ViewData.model)。DocumentFolderId.ShouldEqual(DocumentFolderId); 它应该在视图中有返回文档文件夹名称模型=()=>((AddNewDocumentView)result.ViewData.model).DocumentFolderName.ShouldEqual(DocumentFolderName); 静态视图结果; } 该点是传递给视图的viewmodel,其中包含需要测试的所有数据。可以直接从result.ViewData.Model获取这些数据

    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;
    }