Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, Doom100500, Вы писали:
D>>Мою ошибку в твоём кривом дизайне? D>>Ты победил.
S>Все что ты говоришь — это относится к однопоточному приложению. Видел ли когда-нибудь тесты, направленные именно на проверку в многопотоке? Только честно.
Я их писал на нескольких языках.
Тебе надо проверять ожидаемое состояние с текущим.
Тебе надо знать что будет система дедать и как обрабатывать систуации когда это не согласуется (это то, чего в твоём дизаине нет в принципе).
Ты не можешь тестами задетектить дедлок, но ты можешь сделать дизаин таким, чтобы ты смог определить такую ситуацию и принать соответствующие меры (вот это ты в тестах и проверяешь).
Сделать ты это можешь, если у тебя всегда есть хендлы/указатели/ референсы на что-то, что во что у тебя обёрнуты потоки. Синхронизация должна быть с таймаутами (опять что-то, что можно протестировать), а это уже не просто lock{} из helloword и chatgpt, а что-то с контролем времени. Тебе нужно знать как очистить систему при возникновении ситуации, когда ты решаешь прибить сущетвующие задачи с соответствуйющим фидбеком вызывающей стороне, чтобы она также могла обработать эту ситуацию. А для этого тебе нуже вменяемый протокол обмена информацией между твоими потоками. Всего этого у тебя нет.
Весь это обвес и проверяешь в тестах мокая то один интерфейс то другой, дабы создать валидное/не валидное состояние.