Alex
функция разбора пакета находится в структуре пакета
Alex
оно отдельно протестировано
Alex
мне нужно убедиться что пакет отсылается и правильный.
Маjко
Ну, всё верно
Маjко
Это интеграционное тестирование)
Маjко
Пиши тест
Маjко
Отсылай
Alex
т.е я Connection::new() без интеграционного теста не протестирую?
Маjко
В юните ты можешь протестить, что функция создает правильный объект, с нужными данными
Маjко
Connection::new() это часть API?
Маjко
Смысл юнитов в том, что помимо того что ими отсеивают неусидчивых джунов, они работают как регресионные тесты. Ты точно знаешь что реализация протокола верна, и что она будет верна, если тесты проходятся. Это типа последний рубеж, это тесты, которые не зависят ни от каких внешних сил. ИМХО, у кого-то может быть другое мнение
Alex
Connection::new() это часть API?
Часть API библиотеки.
Маjко
Ну то есть блин, если у тебя всё оттестировано в плане реализации логики, тебе остается только убедиться, что вся система работает верно, что пакеты шлются, что пользователь доволен, а внешний сервис не выкидывает 500ю ошибку
Маjко
Это чисто задача интеграционного
Alex
Т.е new я не смогу оттестировать через юниты?
Ivan
я, конечно, не в тему, но в канале по линупсу мне не помогли. Может кто настраивал nginx+fasstCGI напишите в личку
Маjко
Т.е new я не смогу оттестировать через юниты?
Если там подключение и передача данных — это не лучшая идея. Ты можешь, тебя никто не остановит.
Denis
… вставлю свои 5 копеек. Connection::new() - не лучший кандидат, чтобы что-либо отсылать. По крайней мере выглядит это как инициализация структуры, а не как отправка. Полагаю, содержимое Connection::new() нужно разбить на пару частей (и пару методов) - собственно, (1) инициализация и (2) отправка.
Маjко
+
Alex
Окей, как юнит тестировать отправку?
Маjко
Как сделали ребята с TCP?
Маjко
Поднять локальный dummy сервер прямо в тесте
Alex
Они прям в юнитах сделали интеграционные.
Маjко
Проверить, что на него приходят нужные байтики
Маjко
Тут тонкая грань
Alex
Я так и делаю с new, ты говоришь что это интеграционный.
Alex
И говоришь что это не ок.
Маjко
Блин, че ты не мозги то мозолишь? Я всё это время думаю, что ты там на внешний сервер стучишься
Alex
Я dummy сервер запустил
Alex
Ты говоришь что это тест IO
Маjко
Типа как ребята с TCP?
Маjко
Это и есть тест IO
Alex
Как сделали ребята с TCP?
Alex
Поднять локальный dummy сервер прямо в тесте
Alex
Проверить, что на него приходят нужные байтики
Alex
Я тебя не понял, так это ок или нет?
Маjко
Can't see any harm in that
Маjко
Как такие тесты могут рандомно падать?
Alex
Окей, ну хоть пришли к общему мнению.
Alex
Как такие тесты могут рандомно падать?
Порт занят соседним тестом
Маjко
А, лол. Ну как решение — можно отвязать либу от конкрентного примитива IO и перейти на (Buf)Read/(Buf)Write
Маjко
Хотя это оверкилл, если такой задачи близко нет
Маjко
Энивей, отталкиваться надо от того, какой результат надо достичь
Alex
Ну я тесты для некоторого TDD юзал
Маjко
Я интеграционные вообще в одном проекте выносил в отдельный бинарь потому что поднимать по серверу на каждый тест было слишком больно
Маjко
Был тестсервер и интеграционные тесты, которые можно запускать только после запуска тестсервера
Маjко
Не лучшее решение х)
Alex
Погромирование это вообще часто поиск компромисов
Маjко
Но когда дедлайн через 2 недели выбора особо не было
Маjко
На расте это поиск компромиссов с borrowck
Alex
Я вот боюсь в асинхронщину на расте влезать
Alex
Когда увидел то адище что сюда кидали )
Маjко
кекекеке
Маjко
Забавно, но именно асинхронщина — основной хлеб погроммистов на расте (которых я знаю)
Alex
Не удивительно, раст позволяет это безопасно писать
Маjко
Да, @LooMaclin ?
Alex
И сиильно эффективнее в рантайме по скорости и памяти, в отличит от ноды
Alex
У ноды вроде нет cpu pool
Alex
иди на скалу)
Я там бегло синтаксис поглядел, толком ничего не понял.
Alex
Надо сидеть и разбираться, особого смысла не вижу когда есть раст.
Anonymous
синтаксис там простой
Маjко
Там асинхронщина — это не больно
Anonymous
возможностей написать много
Маjко
Там есть GC)
Маjко
И хоть под дотнет хоть под JVM пиши
Anonymous
scala-native и можешь отрубить гц)
Маjко
Еее
Маjко
scala-native и можешь отрубить гц)
Это как NullGC в Java, мусор просто не будет собираться? :D
Anonymous
на самом деле подсчет ссылок как механизм хуже, чем современные гц)
Маjко
По этому перл и сдох
Маjко
В растах и крестах хоть можно выбирать когда юзать, а когда нет
Nikita
Зато Свифт жив
Маjко
Резонно
Маjко
Но блин, у него альтернатива — ObjC
Маjко
Что угодно лучше чем ObjC
Anonymous
свифт похож на раст
Anonymous
немного
Маjко
Так же любят ломать совместимость?)