Модульное тестирование C # - Утверждения на JSON - PullRequest
0 голосов
/ 23 ноября 2018

Я просто играю с некоторыми 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"
  }
]}

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Здесь - расширение fluentassertions для JSON, которое содержит много полезных методов для утверждения JSON:

Available extension methods BeEquivalentTo() ContainSingleElement() ContainSubtree() HaveCount() HaveElement() HaveValue() MatchRegex() NotBeEquivalentTo() NotHaveElement() NotHaveValue() NotMatchRegex()

Я не являюсь автором этой библиотеки.

0 голосов
/ 23 ноября 2018

Используя следующие строго типизированные определения, основанные на ожидаемом JSON от themoviedb

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");
...