Даже если слушатель не реализует интерфейс, вы все равно можете создать макет для него, используя что-то вроде Mockito . Используя вставку кода во время выполнения, проверку класса, который нужно смоделировать, и фиолетовую пыльцу пикси, он может выдавать себя за другие классы. В моей компании большинство модульных тестов используют либо Mockito (более новые), либо EasyMock (более старые), поэтому мы уверены, что тестируем ТОЛЬКО один класс.
Я подвергаю сомнению ваше утверждение «Обновление: я проверяю Слушателя (а не Предмет)». Если ваш тест проверяет, вызван ли слушатель, вы проверяете то, что должно вызывать слушателя, а не сам слушатель. Так что же это?