Я тоже go за линтер здесь, но вы можете реализовать что-то в Java. Представьте, что вы хотите, чтобы модульный тест подтвердил, все ли потенциальные методы тестирования были выполнены. Вы можете создать модульный тест, используя Java Reflection API. Пример ниже:
Тестовый класс, для которого я хочу знать, пропустил ли я потенциальный метод теста:
public class TestClass {
@Test
public void testDontShowMe() {
// my test with annotation
}
public void testShowMe() {
// my test without annotation
}
public void dontShowMeCauseNoPrefix() {
// my test without test prefix
}
private void someUtilityMethod() {
// a test private utility method
}
}
Тестовый класс, который собирается проверить, что потенциальный метод тестирования не был пропущено:
public class CheckNoForgottenTests {
@Test
public void testNoMissingTests() {
List<Method> nonAnnotatedMethod = Arrays
.asList(TestClass.class.getDeclaredMethods()).stream()
.filter(m -> Modifier.isPublic(m.getModifiers())
&& !m.getName().startsWith("test")
&& m.getDeclaredAnnotation(Test.class) == null)
.collect(Collectors.toList());
nonAnnotatedMethod.forEach(m -> System.out.println("TestClass potential missed test: " + m.getName()));
assertEquals(0, nonAnnotatedMethod.size());
}
}
Применяемый здесь фильтр проверяет:
- Если метод опубликован c AND
- Если имя метода начинается с "test" (вид соглашения) И
- Если метод не имеет
org.junit.Test
аннотации
, вы можете адаптировать условия в зависимости от ваших потребностей
Это пример. Здесь многое можно улучшить. Этот пример проверяет только один данный тестовый класс, конечно, он может быть изменен для работы с заданным списком классов.
Если вы не хотите предоставлять список всех ваших тестовых классов, вы можете проверить наличие некоторых библиотек отражений, которые позволяют вам получить все классы из данного пакета или чего-то еще.