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

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


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

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


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


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

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

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

З.Ы.
По идее при сбросе сессии — еще бы передавать какую именно сессию сбрасываем, а то иначе никак не понять — вдруг сбросим новую сессию, которую только что восстановили (уже после запроса на обновление).
=сначала спроси у GPT=
Отредактировано 10.02.2025 8:20 Shmj . Предыдущая версия . Еще …
Отредактировано 10.02.2025 8:09 Shmj . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.