Подпись к вопросу, дословно:
Если кому само слово не знакомо, то поясню: на неформальном сленге выражением "Тест Шрёдингера" обозначают Юнит тест, который находится в состоянии суперпозиции. То есть в независимости от количества успешных/провальных запусков Вы не можете гарантировать, что он на самом деле работает или не работает. Вы ничего не можете о нём сказать. Явление может иметь и другие названия, но мне лично известно именно под таким.
Разберём по частям.
Если кому само слово не знакомо, то поясню: на неформальном сленге <...>
За десятилетие профессиональной разработки ПО и целый стеллаж прочитанной профильной литературы на двух языках я ни разу не видел термин "тест Шрёдингера". Я не нашёл этого термина ни на
c2 wiki, ни
у Мартина Фаулера, ни в
Jargon File Эрика Реймонда. У Реймонда есть слово "
шрёдинбаг", который не про тест, а про баг, и смысл у него совершенно другой.
Юнит тест, который находится в состоянии суперпозиции
Это будет означать, что он одновременно проваливается и завершается успешно. Такое может случиться, например, если у нашего фреймворка тестирования баг в каком-нибудь из ассертов, и он рапортует неверный результат.
в независимости от количества успешных/провальных запусков Вы не можете гарантировать, что он на самом деле работает или не работает. Вы ничего не можете о нём сказать.
Такой код не называется "юнит тестом" вообще. Например, в своей "Разработке через тестирование" Кент Бек пишет прямым текстом: "Тест — это процедура, которая позволяет либо подтвердить, либо опровергнуть работоспособность кода". (стр. 126 по изданию издательства "Питер" от 2003 года). Если вы запускаете тест и он не говорит вам, работает тестируемый код или нет, это не тест, это просто какой-то левый код.
Собственно вопрос к тем программистам, которые сталкивались с такими явлениями. Реально интересно, кто как с этим борется?
Удалить этот код и написать нормальный тест. Вы, возможно, имеете непродуктивное представление о том, что такое "юнит-тест". Они настолько маленькие и простые, что проще удалить и написать новый, чем разбираться в том, почему он не даёт вам нужной информации.
Учтите, что я отвечаю с позиции того, что любой автоматический тест обязан на 100% контролировать все зависимости кода, которые тестирует, и подразумеваю, что для вас это тоже само собой разумеющееся. Конечно же, самая элементарная причина того, что тесты иногда выполняются, иногда нет - недостаточный контроль над зависимостями кода, которые ещё и ведут себя непредсказуемо.
В xUnit Test Patterns, и в книге, и на сайте, есть раздел под названием
Erratic Tests, и последняя из причин такого теста называется
Nondeterministic test. Решением проблемы является упрощение теста до такой степени, что он будет полностью предопределённым, что практически дословно повторяет то, что я говорил выше.