Нет ничего лучше, чем читать такие комментарии! Это всегда приятно, когда переданные знания пригодились на практике и нашли свое воплощение в реальном мире :) Ведь именно это является целью канала codaza - дать знание, которое можно взять и применить для решения конкретной проблемы.
Доброго времен суток. Спасибо за урок, очень наглядное применение класса WebApplicationFactory. А разве после замены всех внешних зависимостей на моки ваш тест не стал юнит-тестом, но только в более сложной реализации?
Тиран, отличный вопрос. Подмена сервиса нужна, в случае когда мы хотим убрать зависимости, которые не требуют тестирования. Например, Вы пользуетесь внешним API (который писали не Вы) или у Вас есть какой-то свой сервис, который обращается к внешнему API. В этих случаях следует подменять внешние зависимости, так как они не нуждаются в тестировании. Вы тестируете непосредственно Ваш функционал. Дополнительную информацию можно почитать в статье Мартина Фаулера: martinfowler.com/bliki/IntegrationTest.html Еще есть неплохой вводный туториал по интеграционному тестированию: www.softwaretestinghelp.com/what-is-integration-testing
Недавно начал разбираться в этой теме - на русском про WebApplicationFactory мало инфы (хотя штука несложная, но полезная). Единственное что добавил бы, так это насчет HttpClient - его рекомендуется не использовать как, допустим DbContext, т.е. с using и создавать свой для каждого запроса. От этого может накапливаться много висячих неактивных соединений. Вместо этого лучше расшаривать один экземпляр как можно больше.
Да, проблема о которой Вы говорите связана с истощением пула активных соединений. Для её решения, вместо HttpClient, принято использовать HttpClientFactory. HttpClientFactory избавляет разработчика от рутинной работы по отслеживанию состояния активных соединений. По сути, при создании новых экземпляров HttpClient он не воссоздает новый обработчик сообщений, а берет его из пула. Вы можете подробнее почитать об этом в официальной документации от Microsoft: docs.microsoft.com/ru-ru/dotnet/architecture/microservices/implement-resilient-applications/use-httpclientfactory-to-implement-resilient-http-requests
Привет! Благодарю 🙂 Рад, что видео понравилось. Я использую ReSharper, там много полезных и удобных подсказок. Очень рекомендую в повседневной разработке.
Пожалуйста :) Все технические детали можно почерпнуть из официального гайда Microsoft: docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-6.0 Концептуальные вопросы (в отрыве от технологии) хорошо изложены в классических книгах: Binder, Robert V.: Testing Object-Oriented Systems: Models, Patterns, and Tools. Addison Wesley J. Myers: The Art of Software Testing, Glenford
Спасибо за видео! Подскажите пожалуйста, а в чем смысл использования класса webapplicationFactory, если все приведённые тесты сервиса и контроллера можно выполнить без него, а все зависимости запихнуть в mock или даже в automock и так же подменить поведение для возвращаемого результата? Или это просто один из способов)? Спасибо
Существуют разные способы тестирования приложений на ASP.NET. Использование WebApplicationFactory - один из самых удобных, который рекомендует Microsoft. Всё что Вы описали, достаточно легко делается с использованием WebApplicationFactory. В своих проектах, когда требуется проведение интеграционного тестирования, я всегда использую именно этот способ. Честно говоря, я никогда не пробовал поднимать хост приложения в памяти для тестов как-то иначе, так как WebApplicationFactory покрывает 100% всех нужд. Как Вы это делаете иначе в своих проектах? Поделитесь, пожалуйста 🙂
@@codaza-channel да по сути делается все тоже самое один в один, так же задаётся поведение, но без использования этого класса. Мои лиды видимо решили не особо париться по этому поводу)
Возможно, это уже legacy-решения.. 🙂 или, у банка есть особые требования, где использование WebApplicationFactory не реализует тех функций, которые критичны. Мне давно не доводилось видеть интеграционных тестов не использующих WebApplicationFactory.
Если в вашем коде есть обращения к сторонним Web API, то использование mock-объектов вполне допустимо. В противном случае, это будут реальные обращения. Если же есть соглашения со сторонними разработчиками по содержанию инфраструктуры с dev-стендами, то можно пользоваться тестовыми подключениями. Всё зависит от целей и задач проекта над которым Вы работаете.
Кто ни будь получал подобную ошибку? Npgsql.PostgresException : XX000: tuple concurrently updated На сколько я понимаю идет конкуренция при одновременных операциях в одну запись, но у меня везде id случайные, логирование не помогает понять в чем проблема. Такое ощущение что падает при создании HttpClient.
Удобная навигация по видео :)
0:00 - Начало
2:44 - Простой пример
10:32 - Пример с подменой сервиса
24:08 - Пример с подменой баз данных
Случайно попало в рекомендации, ранее не попадал на этот канал. Спасибо! Хорошее объяснение.
Буду рад увидеть еще более углубленные видео по интеграционному тестированию)
Это одно из самых лучших объяснений, спасибо вам
Рад, что информация была полезной :)
@@codaza-channel благодаря вам, поняла свои ошибки, с удовольствием буду смотреть ваш канал, желаю вам развить его, у вас очень круто получается
Очень хороший канал , наткнулся случайно . Продолжайте в том же духе !)
Спасибо большое за ваше видео. Благодаря ему разобрался с тестами в своем учебном проекте и сдал его вовремя:)
Нет ничего лучше, чем читать такие комментарии! Это всегда приятно, когда переданные знания пригодились на практике и нашли свое воплощение в реальном мире :) Ведь именно это является целью канала codaza - дать знание, которое можно взять и применить для решения конкретной проблемы.
Круто !!! Не останавливайся!
Благодарю за поддержку! Надеюсь, информация в видео оказалась полезной 🙂
Очень полезно, понятно и хорошо сделано, спасибо!
Очень полезная инфа. Спасибо!
Вы самы крутой, спасибо за такой крутой ролик.
Спасибо. Очень пригодилось.
Спасибо. Познавательно.
Доброго времен суток.
Спасибо за урок, очень наглядное применение класса WebApplicationFactory.
А разве после замены всех внешних зависимостей на моки ваш тест не стал юнит-тестом, но только в более сложной реализации?
огромное спасибо за видео. маленький вопрос - в чем была необходимость вызова CreateScope()?
я не понял зачем нужно подменять сервис а потом тестировать ?
где можно читать дополнительную инфу ?
Тиран, отличный вопрос. Подмена сервиса нужна, в случае когда мы хотим убрать зависимости, которые не требуют тестирования. Например, Вы пользуетесь внешним API (который писали не Вы) или у Вас есть какой-то свой сервис, который обращается к внешнему API. В этих случаях следует подменять внешние зависимости, так как они не нуждаются в тестировании. Вы тестируете непосредственно Ваш функционал.
Дополнительную информацию можно почитать в статье Мартина Фаулера: martinfowler.com/bliki/IntegrationTest.html
Еще есть неплохой вводный туториал по интеграционному тестированию:
www.softwaretestinghelp.com/what-is-integration-testing
@@codaza-channel большое спасибо.
Недавно начал разбираться в этой теме - на русском про WebApplicationFactory мало инфы (хотя штука несложная, но полезная). Единственное что добавил бы, так это насчет HttpClient - его рекомендуется не использовать как, допустим DbContext, т.е. с using и создавать свой для каждого запроса. От этого может накапливаться много висячих неактивных соединений. Вместо этого лучше расшаривать один экземпляр как можно больше.
Да, проблема о которой Вы говорите связана с истощением пула активных соединений. Для её решения, вместо HttpClient, принято использовать HttpClientFactory. HttpClientFactory избавляет разработчика от рутинной работы по отслеживанию состояния активных соединений. По сути, при создании новых экземпляров HttpClient он не воссоздает новый обработчик сообщений, а берет его из пула. Вы можете подробнее почитать об этом в официальной документации от Microsoft: docs.microsoft.com/ru-ru/dotnet/architecture/microservices/implement-resilient-applications/use-httpclientfactory-to-implement-resilient-http-requests
Привет! Отличное видео! Как и предыдущие. Скажи, пожалуйста, а что ты юзаешь когда набираешь тип? У меня тип сам не подтягивается
Привет! Благодарю 🙂 Рад, что видео понравилось. Я использую ReSharper, там много полезных и удобных подсказок. Очень рекомендую в повседневной разработке.
598мс на один простой тест не слишком много времени?
Спасибо за видео, могли бы посоветовать литературу по данной теме?
Пожалуйста :)
Все технические детали можно почерпнуть из официального гайда Microsoft: docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-6.0
Концептуальные вопросы (в отрыве от технологии) хорошо изложены в классических книгах:
Binder, Robert V.: Testing Object-Oriented Systems: Models, Patterns, and Tools. Addison Wesley
J. Myers: The Art of Software Testing, Glenford
@@codaza-channel спасибо)
Я не очень понимаю в интеграционных тестах. Но, по моему субъективному мнению - это не интеграционное тестирование, а юнит тесты с моками
Спасибо за видео! Подскажите пожалуйста, а в чем смысл использования класса webapplicationFactory, если все приведённые тесты сервиса и контроллера можно выполнить без него, а все зависимости запихнуть в mock или даже в automock и так же подменить поведение для возвращаемого результата? Или это просто один из способов)? Спасибо
Существуют разные способы тестирования приложений на ASP.NET. Использование WebApplicationFactory - один из самых удобных, который рекомендует Microsoft. Всё что Вы описали, достаточно легко делается с использованием WebApplicationFactory. В своих проектах, когда требуется проведение интеграционного тестирования, я всегда использую именно этот способ. Честно говоря, я никогда не пробовал поднимать хост приложения в памяти для тестов как-то иначе, так как WebApplicationFactory покрывает 100% всех нужд. Как Вы это делаете иначе в своих проектах? Поделитесь, пожалуйста 🙂
@@codaza-channel да по сути делается все тоже самое один в один, так же задаётся поведение, но без использования этого класса. Мои лиды видимо решили не особо париться по этому поводу)
@@codaza-channel код в закрытом репозитории банка, показать не смогу. Т.к уже не работаю на этом проекте :/
Возможно, это уже legacy-решения.. 🙂 или, у банка есть особые требования, где использование WebApplicationFactory не реализует тех функций, которые критичны. Мне давно не доводилось видеть интеграционных тестов не использующих WebApplicationFactory.
В интеграционных тестах mock не должно же быть?
Если в вашем коде есть обращения к сторонним Web API, то использование mock-объектов вполне допустимо. В противном случае, это будут реальные обращения. Если же есть соглашения со сторонними разработчиками по содержанию инфраструктуры с dev-стендами, то можно пользоваться тестовыми подключениями. Всё зависит от целей и задач проекта над которым Вы работаете.
Кто ни будь получал подобную ошибку?
Npgsql.PostgresException : XX000: tuple concurrently updated
На сколько я понимаю идет конкуренция при одновременных операциях в одну запись, но у меня везде id случайные, логирование не помогает понять в чем проблема. Такое ощущение что падает при создании HttpClient.