@MockBean на все классы, которые ходят по ресту, в родительском классе.
Я тоже периодически так делаю, но мне постоянно высказывают, что это неправильно и что на самом деле надо мокать сетевые вызовы с помощью Wiremock. А я повторяю, что не вижу ничего страшного в том, чтобы просто замокать сервис. Если сервис неудобно мокать (так бывает, например с фейн клиентами), то сделать под него обёртку и замокать уже её ))
Не придумал пока что, что делать, когда реально нужен @MockBean.
Вот я прямо не знаю. Я выношу все @MockBean в родительский класс (вот как во втором пункте) и как правило мокаю только то, что придётся мокать. То есть то что ходит во внешние сервисы и то, что возвращает настройки. А ситуаций, где нужен полноценный мок для полноценной бизнес-логики... В интеграционных тестах стараюсь избегать. Для этого стараюсь писать юнит тесты (в узком смысле этого выражения) с использованием Мокито
Ну вот вопрос рассчётов он какой-то совсем мутный. Есть у меня какой-то RPS допустим. И дальше надо думать, как его обеспечить. И вот как? Для обеспечения 1000 RPS надо испльзовать какую-то базу данных? Но она же на разных железках может работать, с разным количеством памяти. Почём мне знать, сколько запросов в секунду она мне обеспечит?
Типа взять систему, потом подать на неё нагруку и посмотреть, справляется ли, тут понятно всё. Но заранее как я это пойму?
Проблема в том что на сегодняшнем рынке устроиться джуном по вероятности равносильно срыву джекпота на миллионы $$$
Так он устраиваться идёт не джуном, а опытным разработчиком. А вместо себя уже отправляет работать возможно джунов. Сами бы они не справились, но он помогает советом. И вот
Это всё не новости. Но только если 10 приложений делают каждое по 10 соединений, через которые постоянно делаются запросы, им для работы нужно 100 живых соединений с постгресом. И если постгрес может обслуживать только, допустим 50 соединений, то чем тут поможет pgBouncer?
Если приложения нормально работают с коннекшнами, то когда они упрутся в лимиты БД, pgBouncer ничем не поможет. Потому что приложениям для нормальной работы всё равно нужно больше коннекшнов, чем им выдаёт база данных.
Ну разве что приложению никто не скажет, что соединение не удалось установить. Просто ответы на запросы начнут приходить гораздо медленнее, чем раньше.
Да впринципе такой режим работы, который нужен приложению, появился в pgBouncer года полтора назад. До этого вообще нельзя было использовать его для таких случаев. Я лично не уверен, что за полтора года получилось отловить все баги.
Как только у вас будет запущен не один процесс приложения, а сотня-другая, все это превратится в тыкву
Для того, чтобы всё превратилось в тыкву, нужно, чтобы приложение было написано откровенно плохо. Оно должно забирать соединение из коннекшн пула и не возвращать его туда как можно дольше, при этом не делая через это соединение запросов.
Придется иметь и то, и другое.
Для того, чтобы возникла такая необходимость, нужно, чтобы разработчики не понимали, как нужно работать с базой данных и при этом, чтобы используемый технологический стек не поддерживал автоматичекий возврать соединения в пул, когда соединение больше не нужно. Тогда да, придётся ((
Он не интегрирован в приложение. А в приложении нужен коннешн пул, для того, чтобы приложение не тратило время на установку соединения. Ведь даже если у вас есть pgBouncer, с ним тоже надо устанавливать соединение и его потом разрывать. А раз коннекшн пул в приложении всё равно будет, то зачем дополнительный pgBouncer
Единственное что этот процесс занял примерно лет десять, так как при этом нужно было сохранить обратную совместимость. Так что да, решили заимплементить, но это было не очень просто )))
Да, по смыслу похоже на это. Единственное что я не уверен, что в С# в ссылке на структуру не может быть null.
Плюс стереть границы между примитивными типами из коробки и тем, что пользователь может сделать сам. Плюс по-моему специализация дженериков там же прилагается.
Самые крутые заминусованные статьи давно удалены. Но можете прочитать вот эту заплюсованную статью и ответный комментарий на неё https://habr.com/ru/articles/335876/comments/#comment_10370454 . Комментарию поставили 51 минус. После этого автор опубликовал ответный пост. Там было минусов более двухсот ))
А как тогда тестировать логику связанную со спрингом? Ну и впринципе как писать интеграционные тесты тогда?
Я тоже периодически так делаю, но мне постоянно высказывают, что это неправильно и что на самом деле надо мокать сетевые вызовы с помощью Wiremock. А я повторяю, что не вижу ничего страшного в том, чтобы просто замокать сервис. Если сервис неудобно мокать (так бывает, например с фейн клиентами), то сделать под него обёртку и замокать уже её ))
Вот я прямо не знаю. Я выношу все
@MockBean
в родительский класс (вот как во втором пункте) и как правило мокаю только то, что придётся мокать. То есть то что ходит во внешние сервисы и то, что возвращает настройки. А ситуаций, где нужен полноценный мок для полноценной бизнес-логики... В интеграционных тестах стараюсь избегать. Для этого стараюсь писать юнит тесты (в узком смысле этого выражения) с использованием МокитоНу вот вопрос рассчётов он какой-то совсем мутный. Есть у меня какой-то RPS допустим. И дальше надо думать, как его обеспечить. И вот как? Для обеспечения 1000 RPS надо испльзовать какую-то базу данных? Но она же на разных железках может работать, с разным количеством памяти. Почём мне знать, сколько запросов в секунду она мне обеспечит?
Типа взять систему, потом подать на неё нагруку и посмотреть, справляется ли, тут понятно всё. Но заранее как я это пойму?
Вы просто написали про интернет мемность, а в интернет мемах это слово имеет вообще другое значение ))
Так всё-таки, что означает словосочетание "супер-базированная книга"?
Если так, то получается, что опытный разработчик на собеседование попасть не сможет
Вы хотите сказать, что сейчас опытный разработчик даже не сможет попасть на собеседование?
Так он устраиваться идёт не джуном, а опытным разработчиком. А вместо себя уже отправляет работать возможно джунов. Сами бы они не справились, но он помогает советом. И вот
Речь о поддержке prepared statements . Вот про этот пул рекест
https://github.com/pgbouncer/pgbouncer/pull/845
Жалко, что вы не знаете, чем pgBouncer может помочь в такой ситуации. Если разберётесь, напишите, пожалуйста, я буду очень благодарен
Это всё не новости. Но только если 10 приложений делают каждое по 10 соединений, через которые постоянно делаются запросы, им для работы нужно 100 живых соединений с постгресом. И если постгрес может обслуживать только, допустим 50 соединений, то чем тут поможет pgBouncer?
Если приложения нормально работают с коннекшнами, то когда они упрутся в лимиты БД, pgBouncer ничем не поможет. Потому что приложениям для нормальной работы всё равно нужно больше коннекшнов, чем им выдаёт база данных.
Ну разве что приложению никто не скажет, что соединение не удалось установить. Просто ответы на запросы начнут приходить гораздо медленнее, чем раньше.
Да впринципе такой режим работы, который нужен приложению, появился в pgBouncer года полтора назад. До этого вообще нельзя было использовать его для таких случаев. Я лично не уверен, что за полтора года получилось отловить все баги.
Для того, чтобы всё превратилось в тыкву, нужно, чтобы приложение было написано откровенно плохо. Оно должно забирать соединение из коннекшн пула и не возвращать его туда как можно дольше, при этом не делая через это соединение запросов.
Для того, чтобы возникла такая необходимость, нужно, чтобы разработчики не понимали, как нужно работать с базой данных и при этом, чтобы используемый технологический стек не поддерживал автоматичекий возврать соединения в пул, когда соединение больше не нужно. Тогда да, придётся ((
Он не интегрирован в приложение. А в приложении нужен коннешн пул, для того, чтобы приложение не тратило время на установку соединения. Ведь даже если у вас есть pgBouncer, с ним тоже надо устанавливать соединение и его потом разрывать. А раз коннекшн пул в приложении всё равно будет, то зачем дополнительный pgBouncer
С вами сложно поспорить, но почему именно в 2? Интересно как вы это рассчитываете
Автор познал дзен?
А как насчёт проекта, где фигурная скобка, с которой начинается тело метода, находится на той же строке, что и названием метода?
Или проекта, в котором названия методов начинаются с маленькой буквы?
Ну или там, не знаю, где табами отступы надо делать? ))
Единственное что этот процесс занял примерно лет десять, так как при этом нужно было сохранить обратную совместимость. Так что да, решили заимплементить, но это было не очень просто )))
Да, по смыслу похоже на это. Единственное что я не уверен, что в С# в ссылке на структуру не может быть null.
Плюс стереть границы между примитивными типами из коробки и тем, что пользователь может сделать сам. Плюс по-моему специализация дженериков там же прилагается.
Самые крутые заминусованные статьи давно удалены. Но можете прочитать вот эту заплюсованную статью и ответный комментарий на неё https://habr.com/ru/articles/335876/comments/#comment_10370454 . Комментарию поставили 51 минус. После этого автор опубликовал ответный пост. Там было минусов более двухсот ))
Погодите. Траты Linux Foundation на разработку ядра это 2% от общих трат? Это как? Может тут ошибка какая-то?