#java #unit-testing
#java #модульное тестирование
Вопрос:
Я пытаюсь выполнить модульное тестирование некоторого кода. У меня есть 2 поля во входных данных, которые могут быть, а могут и не быть в данных, поэтому я хочу протестировать все 4 сценария (ab, a не b, b не a, ни a, ни b). Я создал 4 разных файла json для использования в качестве имитируемых входных данных, охватывающих каждый сценарий. Я мог бы создать один файл без полей, а затем просто добавить требуемое поле в макет данных для каждого из 4 тестов. Мне кажется, что при таком подходе тест слишком сильно контролирует тестовые данные. Я предпочитаю подход с 4 файлами, но один из моих коллег жалуется на то, что 4 файла почти точно одинаковы.
Я знаю, что это требует мнения, но какой подход кажется лучшим? Есть все 4 файла или каждый тест манипулирует данными перед утверждением?
Комментарии:
1. Это как бы зависит. Если файлы очень большие, то только один. Если они меньше, то это зависит от того, требуется ли больше времени для изменения значения или добавления значения. однако загрузка 4 файлов займет больше времени.
2. Мой голос — никаких файлов — на моем месте я бы хотел, чтобы тест просто вводил json напрямую, поэтому мне не нужно синхронизировать содержимое файлов с моим тестом с течением времени. Я мог бы рассмотреть возможность использования файлов, если бы данные были действительно большими. Если ваш тестируемый класс требует от вас предоставления файла, вероятно, он в любом случае выполняет слишком много и его следует разделить.
3. Также учитывайте стоимость обслуживания. Если эти два поля превратятся в четыре и вам нужно протестировать все комбинации, вы должны предоставить 16 файлов.
4. мои 4 файла довольно маленькие (по 60 строк в каждом)
5. 60 строк, не большая проблема, в любом случае это ничего не изменит. Полностью произвольно. Просто вам придется кодировать это разными способами.
Ответ №1:
Как и для меня, ваш коллега прав.
Создайте два файла: a.json-part
и b.json-part
. Давайте a.json-part
будем содержать
"a": .....
и b.json-part
содержит аналогичный контент для b
(ПРИМЕЧАНИЕ: не JSON, просто часть!)
Итак, для ваших тестов вы можете создавать тестовые данные путем простого объединения частей, таких как
String ab_json = "{" readAsText("a.json-part") "," readAsText("b.json-part") "}";
String a_not_b_json = "{" readAsText("a.json-part") "}";
и так далее.
В этом случае вы можете комбинировать свои поля по своему усмотрению и быть уверенным, что не пропустили ни одного файла в случае изменения какого-либо поля.