Не знаю, будет ли это ответом для всех, но после некоторых копаний вот что мы придумали.
Ошибка, очевидно, вызвана тем фактом, что слушатель не принимал соединения, но почему мы получим эту ошибку, когда другие тесты могут подключиться нормально (мы также не можем подключиться без проблем через sqlplus)? Ключ к проблеме был не в том, что мы не могли подключиться, а в том, что прерывистый
После некоторого исследования мы обнаружили, что во время установки класса были созданы статические данные, которые сохраняли бы открытые соединения в течение всего срока жизни тестового класса, создавая новые по ходу работы. Теперь, даже если все ресурсы были правильно освобождены, когда этот класс вышел из области видимости (конечно, через блок finally {}), во время выполнения были некоторые случаи, когда этот класс поглощал все доступные соединения (хорошо, плохо практическое предупреждение - это был код модульного теста, который подключался напрямую, а не с помощью пула, поэтому такая же проблема не могла возникнуть в рабочей среде).
Исправление состояло в том, чтобы не делать этот класс статичным и не запускать его в настройках класса, а вместо этого использовать его в методах perUset и tearDown.
Так что, если вы получаете эту ошибку в своих собственных приложениях, шлепните профилировщика на этого плохого парня и посмотрите, не может ли быть утечка соединения. Надеюсь, это поможет.