ArchUnit - сопоставление имен без учета регистра
Я пытаюсь настроить тесты с Arch Unit, чтобы проверить свои соглашения об именах, следуя официальным примерам.
Кажется, что утверждения об именовании ArchUnit чувствительны к регистру, что меня беспокоит.
Я хочу проверить, что в пакете нет классов domain.service
содержит слово service
.
Учитывая класс domain.service.FileSystemService
:
- Этот тест проходит:
@ArchTest
val domain_service_should_not_have_names_containing_service: ArchRule =
noClasses()
.that().resideInAPackage("..domain.service..")
.should().haveSimpleNameContaining("service")
- Этот тест не проходит:
@ArchTest
val domain_service_should_not_have_names_containing_service: ArchRule =
noClasses()
.that().resideInAPackage("..domain.service..")
.should().haveSimpleNameContaining("Service")
Я что-то пропустил? Есть ли способ сделать сравнения ArchUnit нечувствительными к регистру?
1 ответ
Если вы не хотите использовать haveNameMatching
как предложено в комментариях, вы также можете создать свой собственный ArchCondition
с.
public static ArchCondition<JavaClass> containName(String namePart) {
return new NameContains(namePart);
}
private static class NameContains extends ArchCondition<JavaClass> {
private String namePart;
NameContains(String namePart) {
super("contains '" + namePart + "' in the name");
this.namePart = namePart;
}
@Override
public void check(JavaClass javaClass, ConditionEvents events) {
if (javaClass.getSimpleName().toLowerCase().contains(namePart.toLowerCase())) {
String message = createCheckMessage(javaClass, "contains '" + namePart + "' in the name");
events.add(new SimpleConditionEvent(javaClass, false, message));
}
}
}
// taken from com.tngtech.archunit.lang.conditions.ArchConditions
public static <T extends HasDescription & HasSourceCodeLocation> String createCheckMessage(T object,
String message) {
return object.getDescription() + " " + message + " in " + object.getSourceCodeLocation();
}
Вы можете использовать это так:
rules.add(classes().that().resideInAPackage("..domain.service..").should(containName("Service")));