Модульное тестирование модуля вывода JSON, лучшие практики - PullRequest
6 голосов
/ 22 апреля 2010

В настоящее время я работаю над модулем, который принимает один из наших бизнес-объектов и возвращает json-представление этого объекта вызывающей стороне. Из-за ограничений в нашей среде я не могу использовать какой-либо существующий модуль записи json, поэтому я написал свой собственный, который затем используется модулем записи бизнес-объектов для сериализации моих объектов. JSON Writer протестирован аналогично этому

@Test
public void writeEmptyArrayTest() 
{
   String expected = "[  ]";
   writer.array().endArray();
   assertEquals(expected, writer.toString());
}

, которым можно управлять только из-за небольшого результата, который производит каждая инструкция, хотя я продолжаю чувствовать, что должен быть лучший способ.

Проблема, с которой я сейчас сталкиваюсь, - это написание тестов для модуля записи объектов, где выходные данные намного больше и намного менее управляемы. Риск ошибок в написании ожидаемых строк, портящих мои тесты, кажется слишком большим, и написание кода таким способом кажется и глупым, и неуправляемым в долгосрочной перспективе. Я продолжаю чувствовать, что хочу писать тесты, чтобы убедиться, что мои тесты работают правильно, и это чувство меня беспокоит.

Как лучше это сделать?

Ответы [ 2 ]

5 голосов
/ 22 апреля 2010

Технически среда, в которой вы развертываете свой код, отличается от среды, в которой вы его разрабатываете, поэтому я бы использовал существующую программу чтения / записи JSON для проверки созданной вами. Если вы используете maven, вы даже можете установить область действия пакета JSON, который вы выбрали, чтобы он был «тестовым», чтобы он не был включен в фактическую сборку.

<dependency>
  <groupId>org.json</groupId>
  <artifactId>json</artifactId>
  <version>20090911</version>
  <scope>test</scope>
</dependency>

В качестве альтернативы, вы можете получить свой модульный тест, унаследованный от JSON Writer. Унаследовав, вы можете проверить все защищенные и закрытые внутренние биты вместо проверки фактического вывода строки.

2 голосов
/ 22 апреля 2010

Поскольку вы не можете использовать внешние библиотеки в своем коде на стороне сервера, вероятно, лучшим подходом было бы ограничить модульные тесты API следующими необходимыми: - Проверить сериализацию примитивного объекта - Проверить сериализацию массива - Проверить сериализацию специальных символов - ...

А затем переместите часть тестов на клиентскую сторону (используя анализатор JSON, чтобы убедиться, что хотя бы ваш JSON действителен).Как только вы обнаружите ошибку при выполнении сценариев браузера, исправьте ее и напишите соответствующий модульный тест, чтобы убедиться, что он не появится снова в будущих версиях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...