увели тут с саппорта на спринт.
вопрос встал. вот тесты пишут.
тест дергает метод контроллера, который дергает асинхронный метод сервиса.
метод контроллера синхронный. т.е. если его дернуть — он скажет — все зашибись. я отработал! то, что сервис вернет — фиолетово.
это как, правильно вообще? ну, понятно, что тесты на сервисы тоже есть. но смысл в тестах таких контроллера мне не понятен, который вернет ноу-контент.
если не прав, поясните, плз. кроме "тут так принято" иных объяснений не вижу
Здравствуйте, nikkit, Вы писали:
N>тест дергает метод контроллера, который дергает асинхронный метод сервиса. N>метод контроллера синхронный. т.е. если его дернуть — он скажет — все зашибись. я отработал! то, что сервис вернет — фиолетово. N>это как, правильно вообще? ну, понятно, что тесты на сервисы тоже есть. но смысл в тестах таких контроллера мне не понятен, который вернет ноу-контент.
В тесте вместо сервиса инъектится подставной тестовый сервис, который и скажет дёрнул его контроллер, и правильно ли, или нет.
И если по логике работа контроллера и должна заключаться в том, чтобы дёрнуть асинхронный сервис, но ответа не ждать, то да, тестировать надо именно факт вызова сервиса, а не результат его работы — тут ты прав, для сервиса есть свои тесты.
Здравствуйте, nikkit, Вы писали:
N>увели тут с саппорта на спринт. N>вопрос встал. вот тесты пишут. N>тест дергает метод контроллера, который дергает асинхронный метод сервиса. N>метод контроллера синхронный. т.е. если его дернуть — он скажет — все зашибись. я отработал! то, что сервис вернет — фиолетово. N>это как, правильно вообще? ну, понятно, что тесты на сервисы тоже есть. но смысл в тестах таких контроллера мне не понятен, который вернет ноу-контент. N>если не прав, поясните, плз. кроме "тут так принято" иных объяснений не вижу
Здравствуйте, nikkit, Вы писали:
N>если не прав, поясните, плз. кроме "тут так принято" иных объяснений не вижу
Тесты — это не про сегодня, а про завтра. Они существуют во времени. Сегодня там пустой контроллер и тест выглядит как высосанный из пальца. Завтра в этот контроллер добавят иф, послезавтра ещё один сервис. В какой-то момент целесообразность написания теста станет очевидной. Вам просто предлагается не ждать этого волшебного момента, и не проводить опрос общественного мнения (пора или не пора), а сразу взять и написать тест, чтобы следующему человеку, который внесёт правки в этот код, не нужно было заново обдумывать это ваше "нужен тут тест или нет", а просто взять и подходящим образом проапдейтить тест. При организации командной работы правила "после туалета нужно мыть руки" работают лучше, чем "если кажется, что бумага была тонкой, то лучше помыть руки, а если уверен, что хорошо свернул в несколько слоёв, тогда мыть руки не обязательно".
Здравствуйте, nikkit, Вы писали:
N>если не прав, поясните, плз. кроме "тут так принято" иных объяснений не вижу
Согласен, в целом, бессмысленно, карго-культ.
Видел проект где на каждый такой ничего не делающий метод был пустой тест. Дурдом.
Ну если параметры есть, можно проверить их парсинг и валидацию например
Здравствуйте, bnk, Вы писали:
bnk>Видел проект где на каждый такой ничего не делающий метод был пустой тест. Дурдом.
Это проблема не с тестами, а с дебилами, которые выделяют "сервисный слой" и выносят в него вообще всё что можно. В итоге контроллеры получаются однострочечными и соответственно тесты на них не имеют никакого смысла.
Здравствуйте, rosencrantz, Вы писали:
R>Здравствуйте, bnk, Вы писали:
bnk>>Видел проект где на каждый такой ничего не делающий метод был пустой тест. Дурдом.
R>Это проблема не с тестами, а с дебилами, которые выделяют "сервисный слой" и выносят в него вообще всё что можно. В итоге контроллеры получаются однострочечными и соответственно тесты на них не имеют никакого смысла.
наверно имеет смысл разделить на модульное и интеграционное(нагрузочное).
в стартовом сообщении наверное имеет смысл последнее. т.е. на стенде, имитирующем реальную среду, засыпать метод параллельными запросами в надежде что упадет.
Ну или придерживаться простого правила в случае с C# — всегда что-то возвращать из метода. хотя true/false.
лучше конечно Result<t',e'>