0

嗨,我在 MVC 控制器中返回了一个 JsonResult,我想对返回的结果进行单元测试。我的控制器代码如下

        return Json(new
        {
            error,
            viewModel,
            contextId = viewModel.ContextId
        });

我的单元测试代码是

        var expectedJson = Json(new
        {
            error,
            viewModel,
            contextId = viewModel.ContextId
        });

我添加了 nuget 包 JSon.Net 和 JSon-js json2,它们都在我的 Web 包中。我不确定为什么这不起作用。

我的控制器使用指令是

using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Ionic.Zip;
using ReferenceData.Web.Services;
using ReferenceData.Web.ViewModels;

我的单元测试的使用指令是

using System;
using System.Collections.Generic;
using System.IO;
using System.Web;
using System.Web.Mvc;
using Moq;
using NUnit.Framework;

控制器方法返回一个 JsonResult。在我的单元测试中,我试图创建一个可以与 JsonResult.Data 进行比较的对象。

// act
JsonResult response = controller.doSomething()
// assert
Assert.AreEqual(response.data, expectedJson)

希望这只是一组新的眼睛会帮助的事情之一。我是使用 Json 的新手,原来的控制器是由其他人编写的,我只是在测试它。

4

4 回答 4

0

您想JsonResult在单元测试中使用。

JsonResult result = controller.ReturnSomeJson() as JsonResult;

看到这篇文章。

于 2013-08-08T10:46:57.713 回答
0

好的,我的错误是使用

Var x = Json(new ...

在我的测试中,我应该这样声明

        var expectedJson = new
        {
            error,
            viewModel,
            contextId = viewModel.ContextId
        };

Json 是从 Controller 继承的方法,这就是为什么它在我的单元测试中不起作用的原因。然后为了访问 JsonResult.data 中的元素,我这样做了

dynamic response = controller.doSomething() as dynamic;

通过使用动态,我可以访问 Json 中的元素,并且可以直接针对它们进行测试。这仍然没有完全工作,但我不确定这是我的测试问题还是我正在测试的代码

于 2013-08-08T13:03:12.170 回答
0

如果您正在使用Assert.AreEqual,则应覆盖Equal以比较对象:Unit Test Assert.AreEqual failed

于 2013-08-08T11:09:02.620 回答
0

最好的方法是在返回匿名类型时使用反射。

var result = this.Controller.Method() as JsonResult;

var viewmodel = result.Data.GetType().Getproperty("viewModel").GetValue(result.Data,null);    

Assert.AreEqual(viewmodel, expectedviewmodelValue);

注意:调试,看看里面有什么result,通过放置BreakPoint,点击时选择“结果”,右键单击,选择“ Quick Watch”。展开为result.Data。查看里面的 value 属性和类型。然后修改.GetProperty("HERE"). 我不确定 is return JSON(...)butreturn JsonResult是什么,通常使用的是什么。

于 2013-08-14T17:42:07.410 回答