Я думаю, у вас есть два варианта: во время выполнения или с помощью статического анализа.
Во время выполнения
Вы сможете подключиться к своим тестам во время выполнения, используя RunListener JUnit (TestNG имеет аналогичную абстракцию), но как вы можете определить, когда сделаны утверждения? Не просто, но это было бы возможно при использовании Java Agent . Вы можете использовать java-агент и библиотеку, которая выполняет манипуляции с байт-кодом, чтобы изменить поведение методов «утверждения» при их загрузке в JVM. Ваши измененные методы должны будут вызывать ваши RunListeners, а затем делать их утверждения как обычные. Вы должны быть в состоянии перечислить каждый метод, который считается «утверждением» (junit? Testng? Hamcrest? И т. Д.?). Уф! Я делал все это в прошлом, это было довольно неудобно, но это работает.
Статический анализ
В вашем случае статический анализ может показаться лучшим выбором. Вы можете отсканировать classpath для всех аннотаций @Test (или эквивалент TestNG) и проверить, какие из них вызывают метод, имя которого начинается с «assert». Я использовал javaparser , чтобы сделать что-то похожее на это, и это работает довольно хорошо.
Как уже упоминалось в другом ответе, имейте в виду, что всегда есть неявное утверждение, что никакие исключения не выбрасываются. У нас есть некоторые действительные и полезные тесты в наших пакетах, в которых нет явных утверждений из-за этого.