C#单元测试-JSON断言

C#单元测试-JSON断言,c#,unit-testing,nunit,assertion,fluent-assertions,C#,Unit Testing,Nunit,Assertion,Fluent Assertions,我只是在玩一些Json和FluentAssertion,我能够成功地调用API,获取结果,反序列化它们,但由于某种原因,当我对响应进行断言时,它会丢失数据,并且是空的。我已经调试过了,可以看到数据流通过,然后在断言过程中丢失 谢谢你的帮助 { [TestClass] public class UnitTest1 { HttpClient client = new HttpClient(); [TestMethod] pu

我只是在玩一些Json和FluentAssertion,我能够成功地调用API,获取结果,反序列化它们,但由于某种原因,当我对响应进行断言时,它会丢失数据,并且是空的。我已经调试过了,可以看到数据流通过,然后在断言过程中丢失

谢谢你的帮助

{
    [TestClass]
    public class UnitTest1
    {
        HttpClient client = new HttpClient();

         [TestMethod]
        public void ActorNotInSeason6Episode1()
        {
            try
            {
                //test = extent.CreateTest("Test 1");
                HttpResponseMessage respone = client.GetAsync("https://api.themoviedb.org/3/tv/1399/season/6/episode/1/credits?api_key=").Result;
                Assert.IsTrue(respone.IsSuccessStatusCode.Equals(true));
                string ResponseMessage = respone.Content.ReadAsStringAsync().Result;
                Actors actors = JsonConvert.DeserializeObject<Actors>(ResponseMessage);
                //var a = Actors.cast["cast"];
                //var names = a.Children[];
                //var a = actors.cast.Children();


           actors.cast.Should().Contain("Emilia Clarke", "Test");

            }
            catch(AssertFailedException)
            {
                Assert.Fail();

            }
        }

    }
}



    class Actors
    {
        public JArray cast  { get; set; }
        public JArray guest_stars { get; set; }

    }
}

使用以下基于MovieDB中预期JSON的强类型定义

public partial class RootObject {
    [JsonProperty("cast")]
    public Cast[] Cast { get; set; }

    [JsonProperty("crew")]
    public Crew[] Crew { get; set; }

    [JsonProperty("guest_stars")]
    public Cast[] GuestStars { get; set; }

    [JsonProperty("id")]
    public long Id { get; set; }
}

public partial class Cast {
    [JsonProperty("character")]
    public string Character { get; set; }

    [JsonProperty("credit_id")]
    public string CreditId { get; set; }

    [JsonProperty("gender")]
    public long Gender { get; set; }

    [JsonProperty("id")]
    public long Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("order")]
    public long Order { get; set; }

    [JsonProperty("profile_path")]
    public string ProfilePath { get; set; }
}

public partial class Crew {
    [JsonProperty("id")]
    public long Id { get; set; }

    [JsonProperty("credit_id")]
    public string CreditId { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("department")]
    public string Department { get; set; }

    [JsonProperty("job")]
    public string Job { get; set; }

    [JsonProperty("gender")]
    public long Gender { get; set; }

    [JsonProperty("profile_path")]
    public string ProfilePath { get; set; }
}
您需要在测试中执行以下操作

//...

var actors = JsonConvert.DeserializeObject<RootObject>(ResponseMessage);

//Assert
actors.Cast.Should().Contain(actor => actor.Name == "Emilia Clarke");
/。。。
var actors=JsonConvert.DeserializeObject(ResponseMessage);
//断言
actors.Cast.Should().Contain(actor=>actor.Name==“Emilia Clarke”);
是JSON的fluentassertions扩展,它包含许多用于断言JSON的有用方法:

可用的扩展方法
beequivalento()
ContainSingleElement()
包含子树()
HaveCount()
HaveElement()
HaveValue()
MatchRegex()
不等同于
NOTHAVELEMENT()
无价值()
NotMatchRegex()


我不是这个库的作者。

显示的JSON没有
cast
键。JSON显示的是否准确?当我调用API时,cast键在那里,
{“cast”:
但我相信JArray删除了它,只是存储了上面听起来不准确的内容。显示的JSON与
Actors
对象模型定义不匹配这是我签入Postman时的JSON:{[
{“cast”:[{“character”:“Daenerys Targryen”,“信用证id:“5256c8af19c2956ff60479f6”,“性别”:1,“身份证”:1223786,“姓名”:“Emilia Clarke”,“订单”:0,“档案路径”:“/lRSqMNNhPL4Ib1hAJxmDFBXHAMU.jpg”}”
当我调试和检查模型定义中的
cast
时,它在没有
{“cast”的情况下存储它:
我在浏览器中调用了API,得到了
{“cast”:[{“character”:“Daenerys Targaryen”,…
//...

var actors = JsonConvert.DeserializeObject<RootObject>(ResponseMessage);

//Assert
actors.Cast.Should().Contain(actor => actor.Name == "Emilia Clarke");