Size: a a a

2020 June 19

JS

Jerzy Syrowiecki in fprog_spb
Alexander Vershilov
> cabal-doctest: A Setup.hs helper for doctests runningcabal-doctest: A Setup.hs helper for doctests running

точно написано? А то в описании пакета сказано, что это хелпер для Setup.hs
источник

AV

Alexander Vershilov in fprog_spb
у меня не взлетел вызов cabal doctest
источник

AV

Alexander Vershilov in fprog_spb
За 30 минут выделенные на переход я не добился результата
источник

JS

Jerzy Syrowiecki in fprog_spb
Alexander Vershilov
За 30 минут выделенные на переход я не добился результата
практика — критерий истины
источник

AV

Alexander Vershilov in fprog_spb
Александр Гранин
Ну ты про моки отвечал уже. Я бы хотел иметь возможность взять логику, описанную стримом, и протестировать ее изолированно. Как мы видели, там можно делать всякие эффекты в IO, и это сразу же ломает тестируемость (совет - "ну не делайте эффекты" считать плохим). В целом, я бы хотел делать функциональное, white box и интеграционное тестирование.

Я в Juspay видел много кода на стримах (streamly) в нескольких разных проектах, и он совершенно неподдерживаемый, лапшеобразный, разнообразный и никоим образом не тестируемый. Причем существенная часть проблем идет именно из факта, что это очень низкоуровневый подход, где каждый фигачит код, как ему вздумается. Нет никакого единого дизайна, нет гайдлайнов, да и сложно их представить. В том числе по тестированию.
Безотносительно моков - ты можешь брать любой кусок стрима и тестировать его изолировано.

Например, ты можешь взять each (fixed-stream) & effectfulStream & checkEffect и проверять каждый стрим в отдельности, что ты и должен делать в юнит тестах.

mock-и если нужны делаются через HandlePattern или MonadX, тут ситуация ничем не отличается от твоей, более того, никто не запрещает тебе сделать Stream (Of Message) AppL () и встроить стримы в твой фреймворк.

> неподдерживаемый, лапшеобразный, разнообразный и никоим образом не тестируемый.

Это субьективно, у меня такое же ощущение было от чтения кода Hydra и Node, что тоже субъективно.

Но я поверю, что со стримами можно написать неподдерживаемый код.

> Нет никакого единого дизайна, нет гайдлайнов, да и сложно их представить. В том числе по тестированию.

Почему? В чем проблема иметь гайдлайны?
источник

AV

Alexander Vershilov in fprog_spb
Jerzy Syrowiecki
практика — критерий истины
Между у меня работает и другой подход не работает и я не понимаю почему, потратив приличное время на попытки разобраться выбор очевиден.
источник

AV

Alexander Vershilov in fprog_spb
Хм, ничего опенсорсного у меня с такими доктестами нет, так что как сделаю могу предложить законтрибьютить устраивающий вариант
источник

JS

Jerzy Syrowiecki in fprog_spb
Alexander Vershilov
> cabal-doctest: A Setup.hs helper for doctests runningcabal-doctest: A Setup.hs helper for doctests running

точно написано? А то в описании пакета сказано, что это хелпер для Setup.hs
перепроверил на cabal-install с чистым кэшом. Cabal теперь не собирается для comonad, например. но cabal-doctest всё ещё тянет. лёгкая зависимость, но всё ещё лишняя
источник

AV

Alexander Vershilov in fprog_spb
Alexander Vershilov
Безотносительно моков - ты можешь брать любой кусок стрима и тестировать его изолировано.

Например, ты можешь взять each (fixed-stream) & effectfulStream & checkEffect и проверять каждый стрим в отдельности, что ты и должен делать в юнит тестах.

mock-и если нужны делаются через HandlePattern или MonadX, тут ситуация ничем не отличается от твоей, более того, никто не запрещает тебе сделать Stream (Of Message) AppL () и встроить стримы в твой фреймворк.

> неподдерживаемый, лапшеобразный, разнообразный и никоим образом не тестируемый.

Это субьективно, у меня такое же ощущение было от чтения кода Hydra и Node, что тоже субъективно.

Но я поверю, что со стримами можно написать неподдерживаемый код.

> Нет никакого единого дизайна, нет гайдлайнов, да и сложно их представить. В том числе по тестированию.

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

JS

Jerzy Syrowiecki in fprog_spb
Alexander Vershilov
Между у меня работает и другой подход не работает и я не понимаю почему, потратив приличное время на попытки разобраться выбор очевиден.
я не распрсил твою реплику, но выше ты меня убедил в том, что cabal-doctest (через custom setup) можно пользоваться
источник

AV

Alexander Vershilov in fprog_spb
А ок, ну я про то, что даже если cabal doctest решение и лучше, то у меня не хватило бюджета времени, чтобы на него перейти. Если кто-то знает как, то я с удовольствием рассмотрю более хорошее решение
источник

MK

Maxim Koltsov in fprog_spb
Alexander Vershilov
А ок, ну я про то, что даже если cabal doctest решение и лучше, то у меня не хватило бюджета времени, чтобы на него перейти. Если кто-то знает как, то я с удовольствием рассмотрю более хорошее решение
у меня в зависимостях просто doctest и нет кастом сетапа
источник

MK

Maxim Koltsov in fprog_spb
в корне тестов есть такой комент:

-- Taken from https://github.com/kowainik/membrain/blob/master/test/Doctest.hs
источник

MK

Maxim Koltsov in fprog_spb
))
источник

AV

Alexander Vershilov in fprog_spb
Но у тебя с кабалом не работает?
источник

MK

Maxim Koltsov in fprog_spb
не работает)
источник

АГ

Александр Гранин... in fprog_spb
Alexander Vershilov
Безотносительно моков - ты можешь брать любой кусок стрима и тестировать его изолировано.

Например, ты можешь взять each (fixed-stream) & effectfulStream & checkEffect и проверять каждый стрим в отдельности, что ты и должен делать в юнит тестах.

mock-и если нужны делаются через HandlePattern или MonadX, тут ситуация ничем не отличается от твоей, более того, никто не запрещает тебе сделать Stream (Of Message) AppL () и встроить стримы в твой фреймворк.

> неподдерживаемый, лапшеобразный, разнообразный и никоим образом не тестируемый.

Это субьективно, у меня такое же ощущение было от чтения кода Hydra и Node, что тоже субъективно.

Но я поверю, что со стримами можно написать неподдерживаемый код.

> Нет никакого единого дизайна, нет гайдлайнов, да и сложно их представить. В том числе по тестированию.

Почему? В чем проблема иметь гайдлайны?
Ну а ты пишешь гайдлайны, скажем, на трансформацию списков в бесточечном стиле? Нет, не пишешь, потому что это низкоуровневый код, и неважно, как он написан. Он решает малые задачи, и пусть кодеры кодят как хотят. Стримы чуть более высокоуровневые, чем списки, но не то чтобы очень. Решение бизнесовых задач на сырых стримах выглядит как применение не того уровня абстракции. Я уже приводил аргумент, что если понадобится SQL подсистема, то ты пойдешь и захачишь ее туда как-нибудь. Не задизайнишь, чтобы это было единообразно, а захачишь. А другая команда захачит совершенно по-своему. То же самое можно сказать про IO в целом. Разработчикам нельзя давать такую свободу, они обязательно начнут ею злоупотреблять. И задачи должны решаться тем уровнем абстракции, который им подходит. Стримы в таком сыром, raw виде - это хачение по месту. Даже FRP был бы более высокоуровневым подходом. Нет смысла делать гайдлайны для низкого уровня, если можно сделать высокоуровневый подход в первую очередь. Это даст больше, чем гайдлайны. Даже сам этот совет - решать задачи соответствующим уровнем абстрацъкции - уже са  по себе гайдлайн.
источник

MK

Maxim Koltsov in fprog_spb
> решение бизнесовых задач на сырых стримах

мне кажется или никто этого не предлагал?
источник

AV

Alexander Vershilov in fprog_spb
Не кажется
источник

АГ

Александр Гранин... in fprog_spb
А потом из-за низкого уровня возникают проблемы, которые непонятно где и непонятно как их фиксить
источник