Re[5]: Как тестировать многопоточные штуки?
От: Doom100500 Израиль  
Дата: 10.02.25 08:26
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, Doom100500, Вы писали:


D>>Пишешь мок на свой интерфейс и проверяешь в реализации мока проверку, что запрос не завершён. Это условия падения теста. А тестируется тут клиентский код, поэтому мокаем интерфейс и пишем туда тестовую логику. Это разве не очевидно? НО тест упал, и что твоя апликация должна сделать? У тебя нет никакого фидбэка что должно произойти, если это условие не выполнится, поэтому исключение. Разве ЭТО не очевидно?


S>Нам нужно вот что протестить — что провайдер не будет делать повторные запросы на восстановление сессии, если такой запрос уже запущен. При этом провайдер и исключения выбрасывать не должен — а просто ждать и вернуть результат после ожидания.


S>>>Тут проблема вот в чем. Нужно как-то протестить что правильно расставлены блокировки, атомарные операции, нет кеширования в памяти (volatile где нужно) и пр. Т.е. даже правильный тест — может не всегда а лишь с определенной вероятностью обнаружить проблему. Но и даже правильный тест написать — так же под вопросом.


D>>Определись кто должен быть ответственным за соблюдением этих условий (провайдер или клиентский код) и что должно произоити, если услоия не выполняются. И это будем тестировать.


S>Провайдер, конечно — не должен делать повторный запрос, если уже запущен один из запросов на обновление сессии.


То есть провайдер — это обёртка. Тогда он и есть этих сессий. Вот то, что оборачиваешь — мокаешь и пишешь там тестовую логику, описанные выше. Когда ты говоришь дождаться завершения предыдущего запроса — а если дедлок, есть ли таймауты. Как это обрабатываем? Что должно произойти? Вот это и тестируем.

S>Но тут вот в чем дело. Если мы запустим 2 запроса — то скорее всего все сработает. А если 200 одновременно и долбить минуту — может быть косяк и вылезет.


Определись или ожидание или 200 одновременно. Количество одновременных запросов должно быть внешним параметром. Если есть требования но одновременные запросы, то в моке делаем счётчик и проверяем.

S>Еще один из негативных сценариев — провайдер не сделает ни одного запроса вообще.


В моке ожидаешь вызовов. Если не было — тест падает. Такое есть в популярных либах для тестов.
Спасибо за внимание
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.