ArchUnit 연습: StringUtil(s) 너무 많은 문제에 지지 않는다
// 実行環境
* AdoptOpenJDK 11.0.9.1+1
* JUnit 5.7.0
* ArchUnit 0.14.1
아키텍처 테스트 동기 부여
프레임워크나 복수의 라이브러리를 도입하면(자), 각각으로 독자적으로 구현된 StringUtil(s) 클래스가 코드 보완에 복수로 오고 어느 것을 사용하면 좋은가 곤란하다, 라고 하는 것은 자주 있습니다.
개발자에 의해 사용하는 StringUtil(s) 클래스가 달라지면, 일관성이 없는, 예상외의 의존을 포함한 코드가 되어 버립니다.
예를 들어, "StringUtil(s) 는
org.apache.commons.lang3.StringUtils
를 사용한다"는 것이 프로젝트의 가이드라인으로 정해져 있다면, 그것을 아키텍처 테스트에 의해 담보할 수 있습니다.아키텍처 테스트 구현
package com.example;
import com.tngtech.archunit.base.DescribedPredicate;
import com.tngtech.archunit.core.domain.JavaClass;
import com.tngtech.archunit.core.domain.JavaClasses;
import com.tngtech.archunit.core.importer.ClassFileImporter;
import com.tngtech.archunit.core.importer.ImportOption;
import org.junit.jupiter.api.Test;
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes;
class ArchitectureTest {
// 検査対象のクラス
private static final JavaClasses CLASSES =
new ClassFileImporter()
.withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
.importPackages("com.example");
@Test
void StringUtilsはApacheCommonsLang3のStringUtilsのみ使用可能() {
classes()
.should()
.onlyDependOnClassesThat(new DescribedPredicate<>("org.apache.commons.lang3 の StringUtils クラス") {
/**
* @param clazz 依存先のクラス
* @return 依存先のクラスが org.apache.commons.lang3.StringUtils である場合、true
*/
@Override
public boolean apply(final JavaClass clazz) {
boolean isStringUtil = clazz.getSimpleName().endsWith("StringUtils")
|| clazz.getSimpleName().endsWith("StringUtil");
if (! isStringUtil) {
// StringUtil(s) でないクラスは、このテストでの依存チェック対象外
return true;
}
return clazz.getPackageName().equals("org.apache.commons.lang3");
}
})
.check(CLASSES);
}
}
Reference
이 문제에 관하여(ArchUnit 연습: StringUtil(s) 너무 많은 문제에 지지 않는다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kawanamiyuu/items/7848b00c590c92e8635c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)