Юнит тест для View Model в Android

แชร์
ฝัง
  • เผยแพร่เมื่อ 2 ต.ค. 2024

ความคิดเห็น • 49

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

    СОДЕРЖАНИЕ:
    00:00:00 - введение
    00:0:54 - разбираем ViewModel (MVVM)
    00:03:20 - пишем Юнит тест
    00:06:37 - применяем Mockito
    00:08:05 - Unit тест
    00:25:39 - заключение

    • @КиемМирзоевич
      @КиемМирзоевич 2 ปีที่แล้ว

      Здравствуйте , как к вам в курсы записаться?

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

      пытался по сайту записаться на курсы, вы работаете еще?

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

    просто титанический труд, видно, что человеку по кайфу то, что он делает. мало того, что учишься, еще и заряжаешься позитивным настроением от автора =)

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

    Эх, а хотелось бы посмотреть тесты с suspend функциями и корутинами во ViewModel

    • @avada-kentaura
      @avada-kentaura 9 หลายเดือนก่อน

      Используй mockk для suspend функций вместо mockito. Этого будет достаточно

  • @PavelStr-x5w
    @PavelStr-x5w 5 หลายเดือนก่อน

    Большое спасибо за такое полезное видео ! :)

  • @MG-it7nx
    @MG-it7nx 8 หลายเดือนก่อน +1

    Посмотрел все видео по архитектуре и хочу сказать, что, Тимофей, ты настоящий мужик и просто красавчик!) Без воды, без всякой нудятины и разглагольствований, без дурацких картинок с мемами, все четко и по делу. Жму руку!)

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

    Тимофей, сделайте пожалуйста урок по MVI паттерну с использованием ViewModel и с обработкой side эффектов без использования сторонних библиотек типа Orbit. В сети отсутствуют хорошие туториалы, а на русском языке тем более.

  • @ЭржанЭшимканов
    @ЭржанЭшимканов 2 ปีที่แล้ว

    Крутое видео!Очень понятно и информативно!

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

    Великолепно 🤩 Спасибо за бесплатный курс Тимофей, огромная благодарность 🙌

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

    Тимофей жалко что пропали, очень годный, интересный и качественный контент снимаете

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

    Здравствуйте. Как вас найти на GitHub ?

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

    Здравствуйте,спксиьо за видео! 9:16 - тогда вы будете нарушать принцип DRY

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

      Далеко не всегда стоит гнаться за переиспользованием кода. Часто лучше сделать незначительный копипаст, но зато иметь независимый код.

  • @ИванДаунитис
    @ИванДаунитис 2 ปีที่แล้ว

    Добрый день, подскажите, новые видео собираетесь записывать, если да, то на какую тему, спасибо

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

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

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

      Да, к сожалению временно (весна 2022) студентов новых не беру. Но вы можете оставить заявку, я всех помечаю и как только, есть возможность, со всеми связываюсь.

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

    Вы работаете андроид разработчиком? Или андроид для вас хобби, давно смотрю вас и хотелось всё время узнать)

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

      Конечно работаю) откуда же все это можно узнать, если не из опыта)). А преподавание - это как раз таки хобби.

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

    Хорошо, что продолжается публикация видео. Спасибо за информацию.

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

    Тимофей шикарно объясняешь давай больше уроков, очень нравится, жаль что так мало видео.

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

    Спасибо!! ты крутой 🥰

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

    Привет. Сделаешь видео по модуляризации не по слоям, а по фичам? и по навигации между модулями фичей? где-то писал, что планировал такое видео

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

      Да, на вкладке сообщество, там как раз голосование идет, какие темы дальше разобрать.

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

    Долгожданное видео.
    Конечно лайк, все на уровне!

  • @АлександрРоманов-р5ф
    @АлександрРоманов-р5ф 2 ปีที่แล้ว

    О наконец-то, обожаю ваши видосы

  • @АлександрЗацепин-ш6ы
    @АлександрЗацепин-ш6ы 2 ปีที่แล้ว

    Привет. На эти тесты получаю Test events were not received, а тесты для domain модуля прошли успешно. Почему эти тесты не работают?

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

    Один из лучших каналов

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

    Добрый день! Будет ли ещё набор на курс "Комплексный курс по Java, Kotlin и Android".

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

      К сожалению в этом году технически не получается заниматься преподаванием (((. Есть группа для тех, кто хочет пойти на обучение:
      t.me/+ecDWHDUu9ak2N2I6
      Там будет информация, как только старт будет.

  • @ЛевШаповалов-х5в
    @ЛевШаповалов-х5в 2 ปีที่แล้ว

    Продолжаете ли вы набор на ваш курс потому что на сайте написанно что мест нет. Это вы уже набрали людей и через какое то время места появятся или набор вообще закрыт?

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

      Время от времени появляются места. Очень много желающих, физически не могу столько принять (((.

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

    Спасибо!

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

    Тимофей, спасибо большое за объяснения! Особенно важным показался нюанс, что нельзя использовать константы из кода приложения в тестах 👍 В документациях про это не пишут 😁
    Однако есть вопрос не теме. Почему публичные методы ViewModel-и названы конкретными действиями (save, load), а не событиями (onSaveButtonClicked, onLoadButtonClicked)? ViewModel же должна реализовать события с View и управлять View, а с конкретными названиями методов ViewModel не реализует события, а предоставляет интерфейс для выполнения конкретных действий. И тогда, если потребуется поменять действие, вызываемое при событии, то придется отредактировать как ViewModel, так и реализацию View (вызывать другой метод ViewModel-и), что является нарушением принципа единственной ответственности у View. У её реализации теперь есть две причины для изменения - при смене дизайна, при смене бизнес-логики. Это так же потребует отредактировать существующие тесты у View. А если называть методы ViewModel-и абстрактно, то при изменении действия, которое должно вызываться при событии, придется редактировать только ViewModel. А если реализация View и затронется, то только для добавления нового кода, а не для смены старого.

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

      Да, все верно говорите. В примере просто упростил, что-бы не писать длинное название, но по хорошему так и нужно их называть.

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

      @@TimofeyKovalenko спасибо! 👍

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

    Добрый день, уважаемый Тимофей! У меня вопрос: функции ViewModel.save() и ViewModel.load() модуля App обращаются к функциям UseCase.execute() модуля Domain, а так же напрямую к моделям модуля domain. Не нарушает ли это принципы чистой архитектуры? Быть может для модуля App нужно было создать свою модель и репозиторий по аналогии с модулем Data?

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

      В большинстве случаев это уже избыточно. App в любом случае получит именно домейн ентити к себе, а дальше можно их замапить в UI ентити, которую вы уже доставите во view, но это необходимо только что-бы дополнительно подготовить данные для UI, например если там сложная ентити и вы хотите ее упросить, что бы View могла просто брать данные и отображать их.
      Про репозиторий не понял, как вы его собираетесь использовать из ViewModel?

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

    эх думал тут с корутинками:(

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

      Пока еще нет, тут только базовые вещи.

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

    Видео интересное, случайно наткнулся на него, но... Я один не понимал и не понимаю смысла этих тестов? Ведь простым дебагом или, на крайняк, логом, можно это все сделать. Да и как-то всё очень очевидно. Мне уже несколько лет никто толково не может объяснить их смысл. Кодинг ради кодинга? Чтоб обосновать свою зарплату? Зачем эти бессмысленные телодвижения?

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

      Как вы собрались использовать дебаг или логи для этого? :)
      Эти тесты как правило запускаются в автоматическом режиме, перед релизом приложения, после реализацию нового функционала или при каждом мердж реквесте. То есть, вы написали эти тесты и забыли про них), работаете дальше с другими задачами. Но, если случайно испортился старый код, то об этом быстро станет известно, когда тесты на сервере упадут.

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

      @@TimofeyKovalenko как это как? Вы не можете отследить записалось в шэйрдпреференс что-то или нет? Ну ок, тест сломается, если кто-то куда полезет и что-то сломает в плане логики. Но почему кто-то должен что-то ломать? Я работаю в крупном проекте и мы прекрасно обходимся без тестов. Я представляю сколько моего драгоценного времени было бы потрачено впустую, если бы я ещё и тестами занимался...

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

      @@beeline09 Если проект крупный то на деле тесты сэкономят больше времени чем уйдет на их написание.

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

    очень жаль, что нет ссылки на гитхаб

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

    Кому нужны варианты с разными параметрами вот код
    @ParameterizedTest
    @ValueSource(booleans = [true, false])
    fun `should try to save and return success status`(saveResult: Boolean){...}