Size: a a a

2020 February 15

AR

Aleksandr Razumov in rust_offtopic
Да и интеграционные клиент-сервер тесты лежат рядом и не очень отличаются от юнит-тестов внешне, на каждую сложную фичу добавляю, чтобы не отвалилась случайно
источник

AR

Aleksandr Razumov in rust_offtopic
Нат тезисом "автотесты не нужны" где-то смеётся один маленький sqlite
источник

B

Bogdan in rust_offtopic
Aleksandr Razumov
Через это проверяю вплоть до обратной совместимости протокола, количества аллокаций в критических местах, обработку таймаутов, дедлоки, рейсы
А можешь рассказать как ты на рейсы/дедлоки тесты пишешь?

я вобще не представляю как писать тесты на  синхронизацию потоков :(
источник

AR

Aleksandr Razumov in rust_offtopic
Bogdan
А можешь рассказать как ты на рейсы/дедлоки тесты пишешь?

я вобще не представляю как писать тесты на  синхронизацию потоков :(
В основном это регрессионные тесты на рейсы, которые я находил раньше, либо что-то типа фаззинга.
Формально это не юнит-тесты получаются, но мне как-то всё равно обычно
источник

P

Pavel in rust_offtopic
Bogdan
А можешь рассказать как ты на рейсы/дедлоки тесты пишешь?

я вобще не представляю как писать тесты на  синхронизацию потоков :(
Запускаешь, короче, много раз...
источник

AR

Aleksandr Razumov in rust_offtopic
Да, примерно так оно и выходит 😂
источник

P

Pavel in rust_offtopic
но желательно ещё какой-то движ устраивать в планировщике, чтоб разные данные были и разные потоки рядом, а то на спокойной машине оно просто одно и то же много раз будет запускать
источник

P

Pavel in rust_offtopic
"помешивать"
источник

AR

Aleksandr Razumov in rust_offtopic
Недавно хотел написать честный тест на рейс, но забил из-за сложности.

В теории его можно гарантированно вызвать, затормозив поток, который мы должны были дожидаться, но не дождались, и явно проверять состояние после выполнения.

Если в тестах мокается большинство окружения (в идеале это вплоть до источника текущего времени, задержек сети и т.д.), то это просто, но обычно все очень далеко от идеала
источник

AR

Aleksandr Razumov in rust_offtopic
Я даже тестирую то, что у меня в логи гарантированно пишется критичная для дебага ошибки инфа, причем со всей нужной метаинфой
источник

P

Pavel in rust_offtopic
если ты знаешь, что рейс иногда всё-таки случается, то проще всего бумажку и ручку брать и рисовать разные варианты последовательностей событий, или в голове перебирать, если можешь
источник

AR

Aleksandr Razumov in rust_offtopic
Pavel
если ты знаешь, что рейс иногда всё-таки случается, то проще всего бумажку и ручку брать и рисовать разные варианты последовательностей событий, или в голове перебирать, если можешь
да, я так примерно и делал)

можно заставить систему перейти в это состояние и проверить рейс так в тесте
источник

P

Pavel in rust_offtopic
Aleksandr Razumov
Недавно хотел написать честный тест на рейс, но забил из-за сложности.

В теории его можно гарантированно вызвать, затормозив поток, который мы должны были дожидаться, но не дождались, и явно проверять состояние после выполнения.

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

AR

Aleksandr Razumov in rust_offtopic
Pavel
кстати да, вроде мок-фреймворки поддерживают отдачу мока с задержкой, никогда не юзал, но теперь буду хотя бы вспоминать об этом
я обычно сам пишу моки, но скорее всего это специфика го, где это тривиально
источник

AR

Aleksandr Razumov in rust_offtopic
по сути там просто коллбеки, в которых можно ассерты добавить тестовые, если уж совсем обобщенно
источник

P

Pavel in rust_offtopic
Aleksandr Razumov
по сути там просто коллбеки, в которых можно ассерты добавить тестовые, если уж совсем обобщенно
ну, например, джавовское мокито поддерживает "если передали такие результаты — отдать это, если другие — вот это, а если не указано — ничего не отдавать и упасть", или "если вот это — вызывать настоящий метод", или "этот мок возвращает дефолтные значения, если не указано иначе", или "отдать для последовательных вызовов это, это и вот это" и комбинации — мелочи, которые часто используются и всё-равно будешь делать что-то своё похожее
источник

AR

Aleksandr Razumov in rust_offtopic
Pavel
ну, например, джавовское мокито поддерживает "если передали такие результаты — отдать это, если другие — вот это, а если не указано — ничего не отдавать и упасть", или "если вот это — вызывать настоящий метод", или "этот мок возвращает дефолтные значения, если не указано иначе", или "отдать для последовательных вызовов это, это и вот это" и комбинации — мелочи, которые часто используются и всё-равно будешь делать что-то своё похожее
да, есть возможность и такое использовать, но что-то не прижилось
источник

P

Pavel in rust_offtopic
Aleksandr Razumov
да, есть возможность и такое использовать, но что-то не прижилось
ну, накладывает свои ограничения и порой приходится иногда драться с фреймворком
источник

P

Pavel in rust_offtopic
Aleksandr Razumov
Я даже тестирую то, что у меня в логи гарантированно пишется критичная для дебага ошибки инфа, причем со всей нужной метаинфой
а вот это как-то потно выглядит, прям сообщения сравниваются?
источник

P

Pavel in rust_offtopic
или объектные логи и проверяются поля сообщений, что они есть?
источник