Pull to refresh

Comments 9

Автор предлагает не использовать моковый фреймворк, а вы предлагаете использовать другой моковый фреймворк, еще более многословный и поощряющий говнокод (тест статики, например)

предлагаю в Kotlin использовать mockk вместо mockito. И ни слова не написал что подход автора плохой - просто у автора свой путь. Когда понадобится не просто замокировать объект, а сделать ещё множество всего, тогда и будет видна разница предлагаемого решения или использования "многословного" фреймворка.

статику тоже иногда надо замокировать - когда вы тестируете код выше её. Тот же "object" вполне себе статика на класс но при этом, вполне себе законная конструкция в Kotlin

ЗЫ: на примерах уровня HelloWorld любое использование фреймворков кажется избыточным

Я подчеркнул только бессмысленность вашего примера. Очевидно, что фреймворк доя тестов удобнее чем его отсутствие. Что касается статики - имхо, если для тестов вам приходится ее мокать, то почти наверняка вы сделали что-то не так

смысл в примере в том, что как аргументация для статьи была озвучена фраза `код стал более "тяжелым" для восприятия` при использовании сторонней библиотеки, которая изначально не была создана под Kotlin

Да, но в таком варианте растет количество "не естественного" синтаксиса, имею в виду конструкции библиотеки every, returns вместо "родных" языковых override

Плюс, сходу не понятно, как сделать собственное поведение для мокируемого метода?

Например, как будет выглядет вот такой мок, но сделанный на mockk

fun repository(repositoryId: Int, origin: Repository? = null, project: Project? = null) = object : Repository by proxy() {
    override fun getId() = repositoryId
    override fun getState() = AVAILABLE
    override fun getOrigin() = origin
    override fun isFork() = getOrigin() != null
    override fun getProject() = project!!
    override fun equals(other: Any?) = (other as? Repository)?.id == id
    override fun hashCode() = id.hashCode()
    override fun getName() = "Repository #$id"
    override fun getSlug() = "repository-$id"
    override fun toString() = name
}

p.s. Вариант moсkk выглядит лучше, чем mockito, но концептуальные претензии такие же

как в вашем подходе проверить, что метод, к примеру isFork, был вызван не более одного раза?

Очевидно же что писать свой велосипед с еще более весёлыми конструкциями. С вероятностью 99% при переходе проекта с уровня hello world на уровень решения прикладных задач выйдет или каша, или решение ничем не "уступающее" в концептуальном плане mokk.

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

Sign up to leave a comment.

Articles