Dependency Rejection and TDD without Mocks. Антон Молдован

แชร์
ฝัง
  • เผยแพร่เมื่อ 21 ต.ค. 2024
  • Доклад Антона Молдована для Съесть собаку #9 15/06/2017
    Материалы из доклада Антона: github.com/Ant...

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

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

    Поздравляю авторов термина Dependency rejection и его адептов с переизобретением доменного слоя чистой архитектуры. Так держать, ещё несколько лет, и вы переизобретёте bounded contexts и вообще DDD. Догнать и перегнать ООП

  • @mikhailkalinin6484
    @mikhailkalinin6484 6 ปีที่แล้ว +23

    Очень сложно слушать речь докладчика, когда идёт русский язык с множеством вставок английских слов: "мес", "артикл", "реджектить", "миксить" итд

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

      согласен. слушать не возможно. надеюсь за эти 4 года спикер пересмотрел свои взгляды на лексикон при выступлениях

    • @ДанилЛозенко-р2с
      @ДанилЛозенко-р2с 2 ปีที่แล้ว

      Очень режет слух. Или уже выступай на английском или на русском но не надо слонять англ слова.

  • @megasuperlexa2
    @megasuperlexa2 5 ปีที่แล้ว +4

    Что если пюрному калькулятору требуется подтягивать разные данные в процессе расчёта, и какие именно - неизвестно до начала расчётов (либо тянуть их все непрактично, допустим в базе триллион записей)

    • @bonumsignum7017
      @bonumsignum7017 5 ปีที่แล้ว

      Фри монады.

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

      То же интересно, как можно применять идеи из доклада для таких задач. @megasuperlexa2 удалось что-то узнать в этом направлении?

    • @ОлегБожок-ф6и
      @ОлегБожок-ф6и 4 ปีที่แล้ว

      fuzzy testing думаю в этом случае подойдет

    • @АнимусАнанимус
      @АнимусАнанимус 4 ปีที่แล้ว

      @@bonumsignum7017 если коротко, как именно фри монады позволяют решить эту проблему?

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

      @@АнимусАнанимус Ты не делаешь сайдеффекты, ты их описываешь, а интерпретатор фри монады их уже выполняет.

  • @АртемАстапов-ц3м
    @АртемАстапов-ц3м 4 ปีที่แล้ว +4

    Все плохо, вот вам пример. А как правильно мы вам не покажем, сами думайте.

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

      да всё он расказал как по его мнению правильно и я с ним полностью согласен. когда вместо обычных данных суют депенденси в домейн - начинается жесть и каша

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

    поток неупорядоченных мыслей. ...я его в домЕн засунул, в чистый дОмен.... судя по рассуждениям, автор ничего сложнее калькулятора не писал и ООП для него - это фреймворк типа спринга

  • @IgorPevnev
    @IgorPevnev 7 ปีที่แล้ว +10

    напомнило - th-cam.com/video/5tkMi72w8j0/w-d-xo.html

  • @ted_res
    @ted_res 4 ปีที่แล้ว

    Я не согласен с докладчиком. Если вам надо получить данные из репозитория, делаете mock для DAO, и возвращаете то, что считаете правильным. Никакого side effect. Если вам надо проверить какие-то специфические параметры, типа "является пользователь админом или нет", вынесите такие вычисления в отдельный сервис, и подключите чего через mock. Далее, что касается void-процедур и невозможности тестирования их содержимого. Да, если ваша процедура что-то вроде сделать_всё_хорошо(o:Object), то вы не покроете её тестами. И вы не сможете её контролировать ни в каком языке, ни на какой платформе, никакими средствами. Если вызываете процедуру, сделайте так, чтобы в ней не было вычислений, это сильно разгрузит тест.
    Интересно было бы узнать, как вы ставите задачи и принимаете код у разработчиков, есть предположение, что сначала даете волю писать, что вздумается, а потом пытаетесь все покрыть тестами. При таком подходе придется либо рефакторить как я описал выше, либо вообще забить на unit-тесты. Уверен, что при такой системе вы никогда не добьётесь от разработчиков, чтобы они выделяли чистую логику в FP.

    • @yurim7756
      @yurim7756 3 ปีที่แล้ว +4

      Так ваш мок и есть сайд эффект. Само ООП, состояния объектов - это практически сайд эффекты. То что он говорит, мне было понятно с начала, когда я узнал про депенденси инжекжин.
      Что такое сайдэффекты? Это когда вы функции будете отправлять одинаковые параметры, а она может возвращать разные ответы (по пути может еще что вокруг менять). А что такое интерфейс? Не это?
      Как-то он сумбурно объяснял, может вы не уловили суть. Суть весьма проста. Запихивая интерфейсы в некоторый класс/метод, который вы собираетесь тестить, вы по сути запихиваете кота в мешке, причем коты могут быть совершенно разные, когда вы тестируете, и когда это будет в реальности работать. Вы в тестах подумали, что дернув интерфейс (мок), он должен отработать одним образом, но в реальности он отработает другим. Вернет не то значение. (Что и есть сайдэффектом). И ваш юнит-тест по сути не гарантирует того, что в реальности система будет работать так же. А значит и ценность теста сильно снижается. У вас куча юнит-тестов, которые делаются ради тестов. А реальный кейс вы как раз можете пропустить.
      Это всё печально, но в ООП парадигме сложно что-то получше придумать.
      Возможно, вы скажете, что юнит-тесты обязаны тестить конкретный код, а не что там передают моки. И будете правы. Но все таки печалиться есть от чего. У вас будет перегруз юнит-тестами, их будет нереально дохрена, а по сути многие из них лишние из-за такой структуры кода. Как в математике, добавили множитель, добавили делитель. Каждый кусок кода окружен юнит-тестами в вакууме, с попыткой угадать как вести себя будут интерфейсы. Т.е. по тестам оверхед будет, и при каждом изменении требований, будет боль всю эту толпу тестов править. Многие из которых по сути на всякий случай. Сайд эффекты, они такие ) Сам на шарпе пишу, страдаю десятилетия ))

  • @core__dump
    @core__dump 4 ปีที่แล้ว

    Добавлю своих 5 копеек на тему деконструкции TDD: th-cam.com/video/sLWURdgEcrI/w-d-xo.html