@oop_ru

Страница 269 из 785
Sergey
27.06.2017
21:28:27
я не дублирую реализацию в тестах

давай конкретнее что там дублируется

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

Google
Sergey
27.06.2017
21:30:28
то есть каст исключений и вся фигня. Трансформация статус кодов точнее в исключение
трансформации как правило за пределами этого метода будут, как и сериализация

Sergey
27.06.2017
21:30:29
как ты добьешься воспроизводимости?

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

но мне часто лень выделять отдельно трансформеры/гидраторы

Sergey
27.06.2017
21:31:12
ну так а че твоя апишка то делать будет?

Sergey
27.06.2017
21:31:39
ну так а че твоя апишка то делать будет?
ты хочешь ее потестить, а тебе ни прекондишен не выставить ни стабильной работы не дождаться

Sergey
27.06.2017
21:32:34
что будет тестировать такой тест? если в методе апишки всего 3 операции выполняется с одной обработкой исключения, и то это как вариант будет лог + переброс другого исключения

и при чем тут сеть к юнит тестам?

Mykola
27.06.2017
21:34:55
гайз, а шо если мы сделаем ламповый митапчик в ирпене-буче? ну там пиво, мяско, поговорить...

природа, все дела

Sergey
27.06.2017
21:36:53
и при чем тут сеть к юнит тестам?
ну у меня есть юнит который работает по сети. Работа с сетью излирована отдельной прослойкой которую мы мокаем и она уже протещена. Что не так?

при помощи мока я делаю воспроизводимые условия, что мол дернули мы а нам пришла какашка, и как мой мэппер это захэндлит

вот если у тебя if-ов в коде нет - тогда да, юнит тест тут не особо нужен

Google
Stepan
27.06.2017
21:37:49
Sergey
27.06.2017
21:37:51
хотя если вместо if-ов математика например - уже надо

Sergey
27.06.2017
21:38:32
а еще как вариант этот юнит, который куда-то по сети ходит, используется не в 1м методе, а в десятке разных

Sergey
27.06.2017
21:38:52
вот как ты будешь этот десяток методов тестить? ведь этот юнит будет отдельно протестирован

Sergey
27.06.2017
21:38:55
может "модуль"?

упростить для остального мира все

соответственно этот юнит для других модулей я буду тупо мокать и смотреть как они реагируют на различные ситуации

Sergey
27.06.2017
21:39:38
get /users/{id} get /users post /users/ ... для каждого метода будет вызов у тебя

т.е у тебя будет 10 одинаковых тестов?

Sergey
27.06.2017
21:39:55
ты как-то странно рассуждаешь

давай возьмем простой кейс: - get /users/{id}

какие кейсы нас интересуют для модуля, который будет по апишке ходить: - нам пришел невалидный респонс - нам пришла ошибка сервера - таймаут - все хорошо и надо замэпить на объект

Google
Sergey
27.06.2017
21:41:35
что регламентирует контракт этого модуля

Sergey
27.06.2017
21:43:08
контракт: - если была ошибка сервера или таймаут - повтори запрос пару раз - если пришла ошибка 404 - кинуть исключение что нет такого юзера - если другие ошибки - кинуть "другая ошибка". - если все хорошо - замэпить на объект и вернуть.

Sergey
27.06.2017
21:43:22
это ты клиента описал

Sergey
27.06.2017
21:43:46
да, это контракт клиента к API. Требования точнее к реализации

Sergey
27.06.2017
21:44:02
мы немного о разных вещах говорим

Sergey
27.06.2017
21:44:26
с точки зрения пользователей этого "клиента" мы получаем следующее поведение: - оно либо вернет нам юзера - либо кинет исключение что нет такого юзера - либо кинет исключение что что-то пошло не так. Этот кейс в других тестах нас не особо интересует.

Sergey
27.06.2017
21:44:32
вот допустим тебе нужно сделать сервер для апихи, которая будет отдавать юзеров этих юзеров она будет брать из другой апихи, клиент которого ты вот как раз описал

Sergey
27.06.2017
21:44:56
вот твой сервер это пачка методов, которые юзают активно клиента для другой апихи. логика у них примитивная

Sergey
27.06.2017
21:45:04
ну мол это не тупо прокся? ты ж для чего-то делаешь свою прослойку?

Sergey
27.06.2017
21:45:07
ну пусть добавляет обфускацию паролей

Sergey
27.06.2017
21:45:08
целью ставишь упростить работу с ней

Sergey
27.06.2017
21:45:31
или я хз, граватар аватарки дергает

Sergey
27.06.2017
21:45:47
я непонимаю что ты от меня хочешь

Sergey
27.06.2017
21:46:03
чтобы ты мне обьяснил как ты видишь юнит тестирование такой тривиальной логики)

Sergey
27.06.2017
21:46:40
чтобы ты мне обьяснил как ты видишь юнит тестирование такой тривиальной логики)
юнит тесты не заслуживают только вещи в которых нет вообще никакой логики. Тупо последовательность операций и все. Там тебе юнит тестами тестить нечего.

а если есть хотя бы один if - то добро пожаловать в юнит тесты

Sergey
27.06.2017
21:48:17
ооокей, у тебя метод который дергает юзера из соседней апишки может вернуть нулл, мы на этот случай 404 эксепшен выплевываем. из-за этого нужно писать целый тест?

Google
Sergey
27.06.2017
21:49:29
1 кейс - apiClient вернет обьект, на выходе мы должны получить этот же обьект 2 кейс - apiClient вернул нул, на выходе мы должны поймать эксепшен протестировал?

даже давай граватар добавим. после того как достали юзера у него берем эмейл и просим его аватарку у граватара, если не нашлась тогда вставляем дефолтную. аж 3 кейса теперь

Sergey
27.06.2017
21:52:46
> мы на этот случай 404 эксепшен выплевываем ты это типа в контроллерах делаешь что-ли?

> из-за этого нужно писать целый тест? твой клиент должен по таймауту повторять запрос 3 раза.

ну мол retry middleware какой

Sergey
27.06.2017
21:53:17
это клиент внутри там занимается

apiClient->find() внутри сам все делает

он возвращает тоьлко 2 варианта, обьект или нул

Sergey
27.06.2017
21:53:37
тогда что ты пишешь?

Sergey
27.06.2017
21:53:49
контроллер, который сделает эти 2 сраных вызова и вернет результат

Admin
ERROR: S client not available

Sergey
27.06.2017
21:53:51
я про тестирование именно гоэтого apiClient

Sergey
27.06.2017
21:54:00
ну с этим apiClient все понятно

Sergey
27.06.2017
21:54:03
Sergey
27.06.2017
21:54:10
погодь)

а если у тебя apiCLient пришел как либа

тогда вообще тесты не нужны?

Sergey
27.06.2017
21:54:29
он же контроллер, он занимается только flow control, там нет if-ов (не должно быть)

тогда вообще тесты не нужны?
ну если у тебя только протещенная либа и контроллеры и больше ничего нет - то да

Sergey
27.06.2017
21:54:52
я привел кейс с условиями, проверка на нулы не считаются?

Google
Sergey
27.06.2017
21:54:56
ну и контроллеры тонкие

я привел кейс с условиями, проверка на нулы не считаются?
я бы сделал просто отдельный сервис-адаптер который бы это хэндлил

и уже это покрывал бы тестами

в контролерах не должно быть if-ов

p.s. ну ты же понимаешь что я крайности описываю? в реальной жизни я не буду замарачиваться по такой фигне

Sergey
27.06.2017
21:56:10
ну давай так, вот у тебя сервис, который на входе получает айдиху, а на выходе должен вернуть либо юзера с аватаром, либо юзера с дефолтной аватарой, либо эксепшен если не найден

Sergey
27.06.2017
21:56:11
тут руками тестить быстрее чем тест писать

особенно когда у тебя вообще все поведение необходимое (ну почти все) хэндлится этим твоим протещенным apiClient

которое и так тебе упрощет поведение снаружи

Sergey
27.06.2017
21:57:01
ну вот сервис как я выше описал, достоен юнит теста или все еще можно забить?)

Sergey
27.06.2017
21:57:42
вот. у нас выходит 3 кейса разных будут проверяться?

Sergey
27.06.2017
21:57:45
можно сделать так что тест будет выглядеть бесполезным

а можно сделать так что будет ок

Sergey
27.06.2017
21:57:54
и тест будет дублировать всю реализацию и делать верификацию кода?

как бы ты написал чтобы этот тест был полезным?

Sergey
27.06.2017
21:58:16
я бы сделал провайдер аватарок который бы юзал граватар и если ничего не найдено возвращал бы просто картинку

вот это тестил бы да

Sergey
27.06.2017
21:58:20
а не тестировал компилятор-интерпретатор

Sergey
27.06.2017
21:58:37
а далее све превращается в просто последовательность операций - тут нечего проверять. разве что интеграционный тест

Sergey
27.06.2017
21:59:00
а его бы тестировал?)
да, почему нет то?

Страница 269 из 785