C# ASP.NET Core 5 | Integration Testing | Интеграционное тестирование

  Рет қаралды 17,338

codaza

codaza

Күн бұрын

В данном ролике рассматривается подход к проведению интеграционного тестирования приложений написанных на ASP.NET Core. Приводится 3 примера: простой пример применения класса WebApplicationFactory, пример с подменой сервиса и пример с подменой базы данных.
Исходный код проекта на GitHub: github.com/codaza/DeliverySer...
Telegram канал: t.me/codaza
На кофе ☕️: pay.cloudtips.ru/p/179d0532
Patreon: / codaza
Boosty: boosty.to/codaza
0:00 - Начало
2:44 - Простой пример
10:32 - Пример с подменой сервиса
24:08 - Пример с подменой баз данных
#csharp #integrationtesting #aspnetcore

Пікірлер: 38
@codaza-channel
@codaza-channel 3 жыл бұрын
Удобная навигация по видео :) 0:00 - Начало 2:44 - Простой пример 10:32 - Пример с подменой сервиса 24:08 - Пример с подменой баз данных
@ShymkoDmytro
@ShymkoDmytro 2 жыл бұрын
Случайно попало в рекомендации, ранее не попадал на этот канал. Спасибо! Хорошее объяснение.
@sanekyakar
@sanekyakar 2 жыл бұрын
Очень хороший канал , наткнулся случайно . Продолжайте в том же духе !)
@allezard_7483
@allezard_7483 2 жыл бұрын
Буду рад увидеть еще более углубленные видео по интеграционному тестированию)
@vitaliySobakinson
@vitaliySobakinson 2 жыл бұрын
Очень полезная инфа. Спасибо!
@Mary0Kule
@Mary0Kule 7 ай бұрын
Очень полезно, понятно и хорошо сделано, спасибо!
@victorbelkov5346
@victorbelkov5346 2 жыл бұрын
Спасибо большое за ваше видео. Благодаря ему разобрался с тестами в своем учебном проекте и сдал его вовремя:)
@codaza-channel
@codaza-channel 2 жыл бұрын
Нет ничего лучше, чем читать такие комментарии! Это всегда приятно, когда переданные знания пригодились на практике и нашли свое воплощение в реальном мире :) Ведь именно это является целью канала codaza - дать знание, которое можно взять и применить для решения конкретной проблемы.
@user-yo7mw6oj4p
@user-yo7mw6oj4p 2 жыл бұрын
Спасибо. Очень пригодилось.
@vitalysushilov5802
@vitalysushilov5802 2 жыл бұрын
Спасибо. Познавательно.
@user-is2ps2ce5m
@user-is2ps2ce5m 3 жыл бұрын
Это одно из самых лучших объяснений, спасибо вам
@codaza-channel
@codaza-channel 3 жыл бұрын
Рад, что информация была полезной :)
@user-is2ps2ce5m
@user-is2ps2ce5m 3 жыл бұрын
@@codaza-channel благодаря вам, поняла свои ошибки, с удовольствием буду смотреть ваш канал, желаю вам развить его, у вас очень круто получается
@Booster33
@Booster33 3 ай бұрын
Вы самы крутой, спасибо за такой крутой ролик.
@user-lp5gp8qs7b
@user-lp5gp8qs7b 2 жыл бұрын
Круто !!! Не останавливайся!
@codaza-channel
@codaza-channel 2 жыл бұрын
Благодарю за поддержку! Надеюсь, информация в видео оказалась полезной 🙂
@ogkisel3431
@ogkisel3431 Жыл бұрын
огромное спасибо за видео. маленький вопрос - в чем была необходимость вызова CreateScope()?
@user-eg1qv9zc1x
@user-eg1qv9zc1x Жыл бұрын
Доброго времен суток. Спасибо за урок, очень наглядное применение класса WebApplicationFactory. А разве после замены всех внешних зависимостей на моки ваш тест не стал юнит-тестом, но только в более сложной реализации?
@user-cw6ie8sy8w
@user-cw6ie8sy8w 2 жыл бұрын
Привет! Отличное видео! Как и предыдущие. Скажи, пожалуйста, а что ты юзаешь когда набираешь тип? У меня тип сам не подтягивается
@codaza-channel
@codaza-channel 2 жыл бұрын
Привет! Благодарю 🙂 Рад, что видео понравилось. Я использую ReSharper, там много полезных и удобных подсказок. Очень рекомендую в повседневной разработке.
@tiranbaghdasaryan243
@tiranbaghdasaryan243 2 жыл бұрын
я не понял зачем нужно подменять сервис а потом тестировать ? где можно читать дополнительную инфу ?
@codaza-channel
@codaza-channel 2 жыл бұрын
Тиран, отличный вопрос. Подмена сервиса нужна, в случае когда мы хотим убрать зависимости, которые не требуют тестирования. Например, Вы пользуетесь внешним API (который писали не Вы) или у Вас есть какой-то свой сервис, который обращается к внешнему API. В этих случаях следует подменять внешние зависимости, так как они не нуждаются в тестировании. Вы тестируете непосредственно Ваш функционал. Дополнительную информацию можно почитать в статье Мартина Фаулера: martinfowler.com/bliki/IntegrationTest.html Еще есть неплохой вводный туториал по интеграционному тестированию: www.softwaretestinghelp.com/what-is-integration-testing
@tiranbaghdasaryan243
@tiranbaghdasaryan243 2 жыл бұрын
@@codaza-channel большое спасибо.
@volodia9509
@volodia9509 2 жыл бұрын
Спасибо за видео! Подскажите пожалуйста, а в чем смысл использования класса webapplicationFactory, если все приведённые тесты сервиса и контроллера можно выполнить без него, а все зависимости запихнуть в mock или даже в automock и так же подменить поведение для возвращаемого результата? Или это просто один из способов)? Спасибо
@codaza-channel
@codaza-channel 2 жыл бұрын
Существуют разные способы тестирования приложений на ASP.NET. Использование WebApplicationFactory - один из самых удобных, который рекомендует Microsoft. Всё что Вы описали, достаточно легко делается с использованием WebApplicationFactory. В своих проектах, когда требуется проведение интеграционного тестирования, я всегда использую именно этот способ. Честно говоря, я никогда не пробовал поднимать хост приложения в памяти для тестов как-то иначе, так как WebApplicationFactory покрывает 100% всех нужд. Как Вы это делаете иначе в своих проектах? Поделитесь, пожалуйста 🙂
@volodia9509
@volodia9509 2 жыл бұрын
@@codaza-channel да по сути делается все тоже самое один в один, так же задаётся поведение, но без использования этого класса. Мои лиды видимо решили не особо париться по этому поводу)
@volodia9509
@volodia9509 2 жыл бұрын
@@codaza-channel код в закрытом репозитории банка, показать не смогу. Т.к уже не работаю на этом проекте :/
@codaza-channel
@codaza-channel 2 жыл бұрын
Возможно, это уже legacy-решения.. 🙂 или, у банка есть особые требования, где использование WebApplicationFactory не реализует тех функций, которые критичны. Мне давно не доводилось видеть интеграционных тестов не использующих WebApplicationFactory.
@fumanchez
@fumanchez 2 жыл бұрын
Недавно начал разбираться в этой теме - на русском про WebApplicationFactory мало инфы (хотя штука несложная, но полезная). Единственное что добавил бы, так это насчет HttpClient - его рекомендуется не использовать как, допустим DbContext, т.е. с using и создавать свой для каждого запроса. От этого может накапливаться много висячих неактивных соединений. Вместо этого лучше расшаривать один экземпляр как можно больше.
@codaza-channel
@codaza-channel 2 жыл бұрын
Да, проблема о которой Вы говорите связана с истощением пула активных соединений. Для её решения, вместо HttpClient, принято использовать HttpClientFactory. HttpClientFactory избавляет разработчика от рутинной работы по отслеживанию состояния активных соединений. По сути, при создании новых экземпляров HttpClient он не воссоздает новый обработчик сообщений, а берет его из пула. Вы можете подробнее почитать об этом в официальной документации от Microsoft: docs.microsoft.com/ru-ru/dotnet/architecture/microservices/implement-resilient-applications/use-httpclientfactory-to-implement-resilient-http-requests
@user-xp3fw1qr6h
@user-xp3fw1qr6h 2 жыл бұрын
В интеграционных тестах mock не должно же быть?
@codaza-channel
@codaza-channel 2 жыл бұрын
Если в вашем коде есть обращения к сторонним Web API, то использование mock-объектов вполне допустимо. В противном случае, это будут реальные обращения. Если же есть соглашения со сторонними разработчиками по содержанию инфраструктуры с dev-стендами, то можно пользоваться тестовыми подключениями. Всё зависит от целей и задач проекта над которым Вы работаете.
@poshwave7780
@poshwave7780 2 жыл бұрын
Спасибо за видео, могли бы посоветовать литературу по данной теме?
@codaza-channel
@codaza-channel 2 жыл бұрын
Пожалуйста :) Все технические детали можно почерпнуть из официального гайда 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
@poshwave7780
@poshwave7780 2 жыл бұрын
@@codaza-channel спасибо)
@user-sp8eb8wf2q
@user-sp8eb8wf2q 9 ай бұрын
598мс на один простой тест не слишком много времени?
@user-dc4zt1zd1l
@user-dc4zt1zd1l Ай бұрын
Я не очень понимаю в интеграционных тестах. Но, по моему субъективному мнению - это не интеграционное тестирование, а юнит тесты с моками
@clutchmeisteryo9831
@clutchmeisteryo9831 11 ай бұрын
Кто ни будь получал подобную ошибку? Npgsql.PostgresException : XX000: tuple concurrently updated На сколько я понимаю идет конкуренция при одновременных операциях в одну запись, но у меня везде id случайные, логирование не помогает понять в чем проблема. Такое ощущение что падает при создании HttpClient.
Writing tests in .NET using xUnit -  xUnit Tutorial
25:50
Nick Chapsas
Рет қаралды 126 М.
Survival skills: A great idea with duct tape #survival #lifehacks #camping
00:27
孩子多的烦恼?#火影忍者 #家庭 #佐助
00:31
火影忍者一家
Рет қаралды 49 МЛН
Русалка
01:00
История одного вокалиста
Рет қаралды 4,9 МЛН
Каха и суп
00:39
К-Media
Рет қаралды 3,5 МЛН
C# Delegates Делегаты
18:14
codaza
Рет қаралды 83 М.
ASP.NET Core Integration Testing Tutorial
24:35
Julio Casal
Рет қаралды 17 М.
C# Proxy Заместитель | Design Patterns
28:51
codaza
Рет қаралды 18 М.
Вопросы собеседования на C# программиста
21:04
Програмысли Влог
Рет қаралды 63 М.
ASP.NET Integration Testing
25:06
Coding Tutorials
Рет қаралды 13 М.
C# Стек и Куча | Stack and Heap | Часть 1
11:02
Survival skills: A great idea with duct tape #survival #lifehacks #camping
00:27