Как выполнить модульное тестирование для десериализации? - PullRequest
0 голосов
/ 22 января 2019

Я использую библиотеку lift json в scala, чтобы десериализовать некоторые конфигурации json для моего Config класса Case. Для десериализации у меня есть класс под названием Parser. У него есть метод get, который пытается десериализовать конфигурацию и в случае успеха возвращает scala.util.Success(Config), в противном случае scala.util.Failure. Мой вопрос: как правильно написать модульный тест для класса Parser?

  1. Должен ли я просто сохранять различные допустимые и недействительные файлы конфигурации в тестовых данных и просто утверждать isFailure и isSuccess из результата метода get?
  2. Или для каждой тестовой конфигурации json, которую я имею, я создаю точный класс Config вручную, а затем утверждаю isFailure, isSuccess, и если isSuccess также утверждает, что десериализованная конфигурация и та, которую я создал вручную, являются такой же?

1 Ответ

0 голосов
/ 22 января 2019

Первый подход явно недостаточен: он может пройти все тесты, давая неправильные поля для Config.

Так что вам нужен второй, но, конечно, Config существует только для допустимых конфигураций, ибыло бы проще использовать isEqual(Success(expectedConfig)) вместо isSuccess и isEqual по отдельности (возможно, извлечь его в метод).Или, если вы используете ScalaTest, рассмотрите TryValues.

Это также очень хороший пример использования для тестирования свойств ( ScalaCheck является самой распространенной библиотекой Scala): если у вас есть также методы сериализации, создайте произвольные конфиги и проверьте, что

fromJson(config.toJson) == Success(config)
...