Использование EmbeddedResourceReader для чтения файла json - PullRequest
1 голос
/ 28 января 2020

У меня есть файл json в моем проекте, который я хочу правильно протестировать для десериализации. Я хочу использовать встроенные ресурсы для этого. Однако я не могу найти правильный способ получить файл json (который сейчас находится в той же папке, что и мой тестовый файл). До сих пор я пробовал следующее:

[Test]
        public void JsonDeserializesTest()
        {
            var reader = new EmbeddedResourceReader(typeof(RatingComponentTests).Assembly, "Components\\UserFeedback");
            var json = reader.ReadToEnd("Rating.json");
            var jsonData = JsonConvert.DeserializeObject<RatingData>(json);
            Assert.IsNotNull(jsonData.results);
        }

Это не работает, когда ReadToEnd не является допустимым методом. Я пробовал «ReadAsStream», но это выдает ошибку, из-за которой я не могу преобразовать поток в строку.

Может ли кто-нибудь указать мне правильное направление? Спасибо

1 Ответ

1 голос
/ 28 января 2020

Обязательно установите Build Action из Rating.json файла как Embedded Resource. Одно решение с использованием GetManifestResourceStream и StreamReader может быть следующим:

[Test]
public void JsonDeserializesTest()
{
  //WindowsTestApp is namespace of project
  using (Stream stream = Assembly.GetExecutingAssembly().
                         GetManifestResourceStream("WindowsTestApp.Rating.json"))
  using (StreamReader reader = new StreamReader(stream))
  {
      var jsonFileContent = reader.ReadToEnd();
      var jsonData = JsonConvert.DeserializeObject<IList<RatingData>>(jsonFileContent);
      Assert.IsNotNull(jsonData);
  }

}

//Test class of json data
public class RatingData
{
    public int ID { get; set; }
    public int Number { get; set; }
}

Пример содержимого файла JSON.

//Content of "Rating.json" file

[
  {
    "ID": 1,
    "Number": 1001
  },
  {
    "ID": 2,
    "Number": 1002
  },
  {
    "ID": 3,
    "Number": 1003
  },
  {
    "ID": 4,
    "Number": 1004
  }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...