У меня есть несколько классов, которые реализуют некоторый интерфейс. Интерфейс имеет контракт, что некоторые методы должны быть синхронизированы, а некоторые не должны, и я хочу проверить этот контракт с помощью модульных тестов для всех реализаций. Методы должны использовать синхронизированное ключевое слово или быть заблокированы на this
- очень похоже на обертку synchronizedCollection(). Это означает, что я должен иметь возможность наблюдать за ним извне.
Чтобы продолжить пример Collections.synchronizedCollection(), если у меня есть один поток, вызывающий итератор(), я все равно должен быть в состоянии войти такие методы, как add() с другим потоком, потому что итератор() не должен блокировать. С другой стороны, я должен иметь возможность синхронизировать сборку извне и видеть, что другой поток блокируется при добавлении().
Есть ли хороший способ проверить, что метод синхронизирован в тесте JUnit? Я хочу, чтобы избежать длинных заявлений сна.