#java #unit-testing #testing
#java #модульное тестирование #тестирование
Вопрос:
У меня есть класс Generator
с методом buildDocument
, и внутри этого метода есть: service.getDocument() EXTENSION;
где private final static String EXTENSION = ".txt";
метод getDocument()
уже протестирован в ServiceTest
классе. Должен ли я добавить метод test for buildDocument
для проверки добавления этого расширения файла? Это немного похоже на тестирование:
private boolean method(){
return true;
}
следует ли тестировать такие методы?
Комментарии:
1. частный логический метод () { возвращает true; } -> такие методы не должны существовать. если они это сделают, протестируйте их. В противном случае вас ждет сюрприз, если кто-то позже изменит реализацию
2. «метод getDocument() уже протестирован в классе ServiceTest» — если getDocument() завершается неудачей, завершится неудачей только больший тест, поэтому вы понятия не имеете, заключается ли проблема в buildDocument() или getDocument(), поэтому getDocument() также должен быть протестирован.
3. @Stultuske итак, по вашему мнению, эта конкатенация строк должна быть протестирована? Этот метод, который
return true
был примером для прояснения вопроса.4. @Michu93 это меняет значение, и, скорее всего, оно где-то используется. Первое, что нужно сделать, это выяснить, действительно ли вам нужен этот метод. Если да, то да, проверьте это.
5. @Michu93 Я никогда этого не говорил. предполагается, что частные методы должны быть протестированы путем тестирования методов, которые их вызывают.
Ответ №1:
Обратите внимание, что ваш метод является частным. Все, что является частным, следует рассматривать как деталь реализации. Таким образом, вы скорее избегаете написания модульного теста для только этой части.
Значение: если у вас где-то уже есть метод тестирования, при котором ваш документ находится в нужном месте с ожидаемым именем (которое будет включать расширение), то вы «достаточно хороши».
Но обратите внимание, что это также немного «личный стиль».
Комментарии:
1. У меня есть тест для expectedName, но без расширения, просто имя документа без
.txt
, вот почему я спрашиваю, нужно ли простоEXTENSION
тестировать2. Стоит отметить, что это показывает различие между тестовым покрытием и объектом тестирования .
3. @Michu93 Вопрос в том, что существующий тест, почему он не учитывает расширение? Вы видите: если расширение не имеет значения, то вам не нужно его проверять. Если расширение важно, то почему этот тест игнорирует этот важный аспект?
4. @GhostCat
getDocument()
просто получает имя документа, потому что тогда вы можете добавить расширение, которое вам нужно. Итак, вServiceTest
есть тест только для имени документа, потому что в других классах я могу использовать этоgetDocument
, а затем добавить любое расширение. Я не уверен, нужно ли добавлять test только для.txt` в частный метод
5. @Michu93 Как сказано: вопрос в том… возникнет ли проблема во время выполнения с вашими пользователями, если файл имеет другое расширение?! Если да: убедитесь, что расширение правильное.