тесты контроллеров
От: nikkit  
Дата: 04.11.23 06:22
Оценка: -1
увели тут с саппорта на спринт.
вопрос встал. вот тесты пишут.
тест дергает метод контроллера, который дергает асинхронный метод сервиса.
метод контроллера синхронный. т.е. если его дернуть — он скажет — все зашибись. я отработал! то, что сервис вернет — фиолетово.
это как, правильно вообще? ну, понятно, что тесты на сервисы тоже есть. но смысл в тестах таких контроллера мне не понятен, который вернет ноу-контент.
если не прав, поясните, плз. кроме "тут так принято" иных объяснений не вижу
Re: тесты контроллеров
От: Xander Zerge Россия www.zerge.com
Дата: 04.11.23 19:57
Оценка: 2 (1) +3
Здравствуйте, nikkit, Вы писали:

N>тест дергает метод контроллера, который дергает асинхронный метод сервиса.

N>метод контроллера синхронный. т.е. если его дернуть — он скажет — все зашибись. я отработал! то, что сервис вернет — фиолетово.
N>это как, правильно вообще? ну, понятно, что тесты на сервисы тоже есть. но смысл в тестах таких контроллера мне не понятен, который вернет ноу-контент.

В тесте вместо сервиса инъектится подставной тестовый сервис, который и скажет дёрнул его контроллер, и правильно ли, или нет.
И если по логике работа контроллера и должна заключаться в том, чтобы дёрнуть асинхронный сервис, но ответа не ждать, то да, тестировать надо именно факт вызова сервиса, а не результат его работы — тут ты прав, для сервиса есть свои тесты.
Серёжа Новиков,
программист
Re: тесты контроллеров
От: BlackEric http://black-eric.lj.ru
Дата: 05.11.23 17:13
Оценка:
Здравствуйте, nikkit, Вы писали:

N>увели тут с саппорта на спринт.

N>вопрос встал. вот тесты пишут.
N>тест дергает метод контроллера, который дергает асинхронный метод сервиса.
N>метод контроллера синхронный. т.е. если его дернуть — он скажет — все зашибись. я отработал! то, что сервис вернет — фиолетово.
N>это как, правильно вообще? ну, понятно, что тесты на сервисы тоже есть. но смысл в тестах таких контроллера мне не понятен, который вернет ноу-контент.
N>если не прав, поясните, плз. кроме "тут так принято" иных объяснений не вижу

How to test your C# Web API

Я делал так в свое время
https://github.com/BlackEric001
Re: тесты контроллеров
От: rosencrantz США  
Дата: 05.11.23 23:13
Оценка:
Здравствуйте, nikkit, Вы писали:

N>если не прав, поясните, плз. кроме "тут так принято" иных объяснений не вижу


Тесты — это не про сегодня, а про завтра. Они существуют во времени. Сегодня там пустой контроллер и тест выглядит как высосанный из пальца. Завтра в этот контроллер добавят иф, послезавтра ещё один сервис. В какой-то момент целесообразность написания теста станет очевидной. Вам просто предлагается не ждать этого волшебного момента, и не проводить опрос общественного мнения (пора или не пора), а сразу взять и написать тест, чтобы следующему человеку, который внесёт правки в этот код, не нужно было заново обдумывать это ваше "нужен тут тест или нет", а просто взять и подходящим образом проапдейтить тест. При организации командной работы правила "после туалета нужно мыть руки" работают лучше, чем "если кажется, что бумага была тонкой, то лучше помыть руки, а если уверен, что хорошо свернул в несколько слоёв, тогда мыть руки не обязательно".
Re: тесты контроллеров
От: bnk СССР http://unmanagedvisio.com/
Дата: 05.11.23 23:27
Оценка:
Здравствуйте, nikkit, Вы писали:

N>если не прав, поясните, плз. кроме "тут так принято" иных объяснений не вижу


Согласен, в целом, бессмысленно, карго-культ.
Видел проект где на каждый такой ничего не делающий метод был пустой тест. Дурдом.
Ну если параметры есть, можно проверить их парсинг и валидацию например
Re[2]: тесты контроллеров
От: rosencrantz США  
Дата: 05.11.23 23:43
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Видел проект где на каждый такой ничего не делающий метод был пустой тест. Дурдом.


Это проблема не с тестами, а с дебилами, которые выделяют "сервисный слой" и выносят в него вообще всё что можно. В итоге контроллеры получаются однострочечными и соответственно тесты на них не имеют никакого смысла.
Re[3]: тесты контроллеров
От: Разраб  
Дата: 06.11.23 00:24
Оценка:
Здравствуйте, rosencrantz, Вы писали:

R>Здравствуйте, bnk, Вы писали:


bnk>>Видел проект где на каждый такой ничего не делающий метод был пустой тест. Дурдом.


R>Это проблема не с тестами, а с дебилами, которые выделяют "сервисный слой" и выносят в него вообще всё что можно. В итоге контроллеры получаются однострочечными и соответственно тесты на них не имеют никакого смысла.


наверно имеет смысл разделить на модульное и интеграционное(нагрузочное).
в стартовом сообщении наверное имеет смысл последнее. т.е. на стенде, имитирующем реальную среду, засыпать метод параллельными запросами в надежде что упадет.
Ну или придерживаться простого правила в случае с C# — всегда что-то возвращать из метода. хотя true/false.
лучше конечно Result<t',e'>
☭ ✊ В мире нет ничего, кроме движущейся материи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.