在C#集成测试中查询JsonResult

本文关键字:查询 JsonResult 集成测试 | 更新日期: 2024-09-19 09:17:15

我正试图为MVC应用程序编写一些集成测试,如下所示

控制器

public JsonResult CreateWithJson(List<string> values) 
{
  if (values == null) return Json(new { Valid = false, Message = "No data was received by the server" });
}

测试等级

public static void TestEmptyDataFailsGracefully()
{
  var objUt = new MyController();
  var actual = objUt.CreateWithJson(new List<string>());
  actual.Should().BeOfType(typeof(JsonResult));
  // this is System.Object
  actual.Data...
  // what I want to do
  actual.Data.Valid.Should.Be(false);
}

那么我该如何查询JsonResult中返回的匿名类型呢?

在C#集成测试中查询JsonResult

您需要定义要反序列化JsonResult的类型。

public class ValidationResults 
{
   bool Valid {get;set;}
   string Message {get;set;}
}
public JsonResult CreateWithJson(List<string> values) 
{
  if (values == null) return Json(new ValidationResults { Valid = false, Message = "No data was received by the server" });
}
public static void TestEmptyDataFailsGracefully()
{
  var objUt = new MyController();
  var actual = objUt.CreateWithJson(new List<string>());
  actual.Should().BeOfType(typeof(JsonResult));
  var serializer = new JavaScriptSerializer();
  var json = serializer.Serialize(actual.Data);
  ValidationResults validationResult = serializer.Deserialize<ValidationResults>(json);

  // what I want to do
  validationResult .Valid.Should.Be(false);
}