Шпионаж объекта, который вы тестируете, считается мне плохой практикой, но эти предупреждения не приводят никаких объяснений, подтверждающих его.Я уверен, что, как и все остальное, им определенно можно злоупотреблять.
Что я заметил при тестировании метода, вызывающего другой метод тестируемого объекта, то лучше, если вы сможете отключить тестированиеоба метода одновременно.Несмотря на то, что вы можете издеваться над вторым методом, чтобы упростить тестирование первого метода, вам все равно придется вернуться в какой-то момент и протестировать второй метод.Лично я поддерживаю насмешку над вторым методом, если он приводит к более чистому тестовому коду.По сути, это вариант, который вам дает вселенная, и его нельзя исключать для всех случаев.
В вашем сценарии я бы предпочел высмеивать объект WebTarget
вместо создания второго внутреннего метода.,Основная причина этого заключается в том, что вам все равно придется вернуться и протестировать второй метод, так что, возможно, стоит заняться им сейчас.Но если вы обнаружите, что ваш код может быть чище, разделив эти первые две строки на их собственный метод (или класс), потому что это повторно используемый код, который используется многократно, то, конечно, разделите его на свой собственный метод.В этом случае архитектура самого кода (а не требований к тестированию) диктует структуру кода.
При издевательстве над WebTarget
, в данном случае это связано с работой с методами компоновщика, например.path(someURI).request().post(somejson)
, каждый из которых должен быть высмеян соответственно.Так что это немного больно.Если бы я делал это, я бы, возможно, использовал интеграционное тестирование вместо юнит-тестирования.Другими словами, подключите и установите сервер, чтобы я мог проверить его.В нашей тестовой среде все серверы остаются работоспособными, поэтому мы можем использовать больше интеграционных тестов по сравнению с юнит-тестами.По мере роста среды это может оказаться невозможным, но сейчас это так и ведет к более чистым интеграционным тестам, которые выбивают большую часть кода при меньшем количестве тестов.