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

แชร์
ฝัง
  • เผยแพร่เมื่อ 7 ก.ค. 2024
  • В данном ролике рассматривается подход к проведению интеграционного тестирования приложений написанных на 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 ปีที่แล้ว +5

    Удобная навигация по видео :)
    0:00 - Начало
    2:44 - Простой пример
    10:32 - Пример с подменой сервиса
    24:08 - Пример с подменой баз данных

  • @ShymkoDmytro
    @ShymkoDmytro 2 ปีที่แล้ว +2

    Случайно попало в рекомендации, ранее не попадал на этот канал. Спасибо! Хорошее объяснение.

  • @allezard_7483
    @allezard_7483 2 ปีที่แล้ว +5

    Буду рад увидеть еще более углубленные видео по интеграционному тестированию)

  • @sanekyakar
    @sanekyakar 2 ปีที่แล้ว +2

    Очень хороший канал , наткнулся случайно . Продолжайте в том же духе !)

  • @vitaliySobakinson
    @vitaliySobakinson 2 ปีที่แล้ว +1

    Очень полезная инфа. Спасибо!

  • @user-yo7mw6oj4p
    @user-yo7mw6oj4p 2 ปีที่แล้ว +1

    Спасибо. Очень пригодилось.

  • @vitalysushilov5802
    @vitalysushilov5802 2 ปีที่แล้ว +1

    Спасибо. Познавательно.

  • @Mary0Kule
    @Mary0Kule 7 หลายเดือนก่อน

    Очень полезно, понятно и хорошо сделано, спасибо!

  • @victorbelkov5346
    @victorbelkov5346 2 ปีที่แล้ว +1

    Спасибо большое за ваше видео. Благодаря ему разобрался с тестами в своем учебном проекте и сдал его вовремя:)

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว +1

      Нет ничего лучше, чем читать такие комментарии! Это всегда приятно, когда переданные знания пригодились на практике и нашли свое воплощение в реальном мире :) Ведь именно это является целью канала codaza - дать знание, которое можно взять и применить для решения конкретной проблемы.

  • @user-lp5gp8qs7b
    @user-lp5gp8qs7b 2 ปีที่แล้ว +2

    Круто !!! Не останавливайся!

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว

      Благодарю за поддержку! Надеюсь, информация в видео оказалась полезной 🙂

  • @user-is2ps2ce5m
    @user-is2ps2ce5m 3 ปีที่แล้ว +4

    Это одно из самых лучших объяснений, спасибо вам

    • @codaza-channel
      @codaza-channel  3 ปีที่แล้ว +7

      Рад, что информация была полезной :)

    • @user-is2ps2ce5m
      @user-is2ps2ce5m 3 ปีที่แล้ว +1

      @@codaza-channel благодаря вам, поняла свои ошибки, с удовольствием буду смотреть ваш канал, желаю вам развить его, у вас очень круто получается

  • @Booster33
    @Booster33 3 หลายเดือนก่อน

    Вы самы крутой, спасибо за такой крутой ролик.

  • @ogkisel3431
    @ogkisel3431 ปีที่แล้ว

    огромное спасибо за видео. маленький вопрос - в чем была необходимость вызова CreateScope()?

  • @user-eg1qv9zc1x
    @user-eg1qv9zc1x ปีที่แล้ว

    Доброго времен суток.
    Спасибо за урок, очень наглядное применение класса WebApplicationFactory.
    А разве после замены всех внешних зависимостей на моки ваш тест не стал юнит-тестом, но только в более сложной реализации?

  • @user-cw6ie8sy8w
    @user-cw6ie8sy8w 2 ปีที่แล้ว +1

    Привет! Отличное видео! Как и предыдущие. Скажи, пожалуйста, а что ты юзаешь когда набираешь тип? У меня тип сам не подтягивается

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว +1

      Привет! Благодарю 🙂 Рад, что видео понравилось. Я использую ReSharper, там много полезных и удобных подсказок. Очень рекомендую в повседневной разработке.

  • @fumanchez
    @fumanchez 2 ปีที่แล้ว

    Недавно начал разбираться в этой теме - на русском про WebApplicationFactory мало инфы (хотя штука несложная, но полезная). Единственное что добавил бы, так это насчет HttpClient - его рекомендуется не использовать как, допустим DbContext, т.е. с using и создавать свой для каждого запроса. От этого может накапливаться много висячих неактивных соединений. Вместо этого лучше расшаривать один экземпляр как можно больше.

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว +1

      Да, проблема о которой Вы говорите связана с истощением пула активных соединений. Для её решения, вместо HttpClient, принято использовать HttpClientFactory. HttpClientFactory избавляет разработчика от рутинной работы по отслеживанию состояния активных соединений. По сути, при создании новых экземпляров HttpClient он не воссоздает новый обработчик сообщений, а берет его из пула. Вы можете подробнее почитать об этом в официальной документации от Microsoft: docs.microsoft.com/ru-ru/dotnet/architecture/microservices/implement-resilient-applications/use-httpclientfactory-to-implement-resilient-http-requests

  • @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.

  • @tiranbaghdasaryan243
    @tiranbaghdasaryan243 2 ปีที่แล้ว +4

    я не понял зачем нужно подменять сервис а потом тестировать ?
    где можно читать дополнительную инфу ?

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว +11

      Тиран, отличный вопрос. Подмена сервиса нужна, в случае когда мы хотим убрать зависимости, которые не требуют тестирования. Например, Вы пользуетесь внешним API (который писали не Вы) или у Вас есть какой-то свой сервис, который обращается к внешнему API. В этих случаях следует подменять внешние зависимости, так как они не нуждаются в тестировании. Вы тестируете непосредственно Ваш функционал.
      Дополнительную информацию можно почитать в статье Мартина Фаулера: martinfowler.com/bliki/IntegrationTest.html
      Еще есть неплохой вводный туториал по интеграционному тестированию:
      www.softwaretestinghelp.com/what-is-integration-testing

    • @tiranbaghdasaryan243
      @tiranbaghdasaryan243 2 ปีที่แล้ว +2

      @@codaza-channel большое спасибо.

  • @user-xp3fw1qr6h
    @user-xp3fw1qr6h 2 ปีที่แล้ว

    В интеграционных тестах mock не должно же быть?

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว +3

      Если в вашем коде есть обращения к сторонним Web API, то использование mock-объектов вполне допустимо. В противном случае, это будут реальные обращения. Если же есть соглашения со сторонними разработчиками по содержанию инфраструктуры с dev-стендами, то можно пользоваться тестовыми подключениями. Всё зависит от целей и задач проекта над которым Вы работаете.

  • @poshwave7780
    @poshwave7780 2 ปีที่แล้ว +1

    Спасибо за видео, могли бы посоветовать литературу по данной теме?

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว +1

      Пожалуйста :)
      Все технические детали можно почерпнуть из официального гайда 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 ปีที่แล้ว +1

      @@codaza-channel спасибо)

  • @user-sp8eb8wf2q
    @user-sp8eb8wf2q 9 หลายเดือนก่อน

    598мс на один простой тест не слишком много времени?

  • @user-dc4zt1zd1l
    @user-dc4zt1zd1l หลายเดือนก่อน

    Я не очень понимаю в интеграционных тестах. Но, по моему субъективному мнению - это не интеграционное тестирование, а юнит тесты с моками

  • @clutchmeisteryo9831
    @clutchmeisteryo9831 11 หลายเดือนก่อน

    Кто ни будь получал подобную ошибку?
    Npgsql.PostgresException : XX000: tuple concurrently updated
    На сколько я понимаю идет конкуренция при одновременных операциях в одну запись, но у меня везде id случайные, логирование не помогает понять в чем проблема. Такое ощущение что падает при создании HttpClient.