C# 单元测试 - 关于 JSON 的断言
C# Unit Testing - Assertions on JSON
我只是在玩一些 Json 和 Fluentassertions,我能够成功地调用 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; }
}
}
JSON
{[
{
"character": "Daenerys Targaryen",
"credit_id": "5256c8af19c2956ff60479f6",
"gender": 1,
"id": 1223786,
"name": "Emilia Clarke",
"order": 0,
"profile_path": "/lRSqMNNhPL4Ib1hAJxmDFBXHAMU.jpg"
}
]}
根据 themoviedb
的预期 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");
Here 是 JSON 的 fluentassertions 扩展,其中包含许多用于断言 JSON:
的有用方法
Available extension methods
BeEquivalentTo()
ContainSingleElement()
ContainSubtree()
HaveCount()
HaveElement()
HaveValue()
MatchRegex()
NotBeEquivalentTo()
NotHaveElement()
NotHaveValue()
NotMatchRegex()
我不是这个库的作者。
我只是在玩一些 Json 和 Fluentassertions,我能够成功地调用 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; }
}
}
JSON
{[
{
"character": "Daenerys Targaryen",
"credit_id": "5256c8af19c2956ff60479f6",
"gender": 1,
"id": 1223786,
"name": "Emilia Clarke",
"order": 0,
"profile_path": "/lRSqMNNhPL4Ib1hAJxmDFBXHAMU.jpg"
}
]}
根据 themoviedb
的预期 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");
Here 是 JSON 的 fluentassertions 扩展,其中包含许多用于断言 JSON:
的有用方法Available extension methods
BeEquivalentTo()
ContainSingleElement()
ContainSubtree()
HaveCount()
HaveElement()
HaveValue()
MatchRegex()
NotBeEquivalentTo()
NotHaveElement()
NotHaveValue()
NotMatchRegex()
我不是这个库的作者。