Следует ли мне избегать использования net/http/httptest в производственном коде?


person Loren Osborn    schedule 15.10.2018    source источник
comment
Зачем вам нужно представлять данные как http.Response? Достаточно ли предоставить статус, заголовки, написанные приложением, и тело в виде [] байта?   -  person Cerise Limón    schedule 15.10.2018


Ответы (1)


Вы не должны использовать этот код в рабочей среде. Независимо от того, чего вы пытаетесь достичь.

Конечной целью httptest.ResponseRecorder является облегчение тестирования, поэтому оно всегда будет расширяться, оптимизироваться — переписываться — с учетом тестирования. Любое предположение может быть сделано в этом пакете, если это делает пакет лучше при тестировании. Авторы пакета предполагали, что это «используется совместно с go test»¹. Я интерпретирую это как препятствование использованию в производстве, потому что тогда они могут свободно ломаться, например. ваше производственное использование в пользу go test использования.

Еще один аргумент касается безопасности. Модель безопасности любого тестового пакета будет заключаться в том, что его использование является доверенным, в то время как код, не предназначенный для тестирования, будет противоположным.

Мир программного обеспечения опасное место. Вы просите сделать его еще более опасным.

person Jonas G. Drange    schedule 15.10.2018
comment
httptest.ResponseRecorder -- его цель - записывать ответы. Если вы не можете полагаться на запись ответов для производственного использования, как тогда вы можете полагаться на него при тестировании? - person zerkms; 15.10.2018
comment
Нельзя так сравнивать производство и тестирование. При тестировании я пишу входные данные, в производстве мы должны предполагать, что любой (включая злонамеренных субъектов) может писать входные данные. - person Jonas G. Drange; 15.10.2018
comment
Я вижу, что вы добавили пункт безопасности, с чем я частично согласен. Тем не менее, я до сих пор не понимаю, какой смысл имеет эта ненадежность: она должна быть надежной, будь то тестирование или производство. Все производственное использование пакета игнорируется его авторами --- какой-либо источник для этого? - person zerkms; 15.10.2018
comment
Из 1: [тестовый пакет] предназначен для использования совместно с "go test" команда. т.е. это намерение авторов использовать в тестировании. Я могу модерировать свой ответ, так как здесь это сильно сформулировано. - person Jonas G. Drange; 15.10.2018
comment
Но тестовый пакет — это не httptest-пакет! И какая часть реализации может иметь проблемы с безопасностью? Рекордер использует байты. Буфер, так почему это проблема? - person apxp; 15.10.2018
comment
Это определенно угол, который я не рассматривал. Мне нужно «немного посидеть с этим ответом», прежде чем пометить его как «принятый», но это действительно похоже на то, что меня беспокоило. Я думаю, вы достаточно хорошо его уловили. Спасибо. - person Loren Osborn; 15.10.2018
comment
@apxp ты прав. Это немного сбивает с толку. Не стесняйтесь удалить это из ответа. На данный момент я приравниваю пакет test и httptest. - person Jonas G. Drange; 15.10.2018