ExamSprintArchitectureTest.java 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package cn.yunzhixue.ability.center.architecture;
  2. import com.tngtech.archunit.core.domain.JavaClass;
  3. import com.tngtech.archunit.core.importer.ImportOption;
  4. import com.tngtech.archunit.junit.AnalyzeClasses;
  5. import com.tngtech.archunit.junit.ArchTest;
  6. import com.tngtech.archunit.lang.ArchRule;
  7. import com.tngtech.archunit.base.DescribedPredicate;
  8. import java.util.Set;
  9. import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;
  10. @AnalyzeClasses(
  11. packages = "cn.yunzhixue.ability.center.examsprint",
  12. importOptions = ImportOption.DoNotIncludeTests.class)
  13. class ExamSprintArchitectureTest {
  14. private static final Set<String> CURRENT_DOMAIN_CONTRACT_DEBT = Set.of(
  15. "ExamSprintReport",
  16. "ExamSprintReportRenderer",
  17. "ExamSprintReportStorage");
  18. private static final Set<String> CURRENT_DOMAIN_JACKSON_DEBT = Set.of(
  19. "ExamSprintReport",
  20. "ExamSprintReportRenderer");
  21. @ArchTest
  22. static final ArchRule contracts_should_not_depend_on_inner_layers = noClasses()
  23. .that().resideInAPackage("..contracts..")
  24. .should().dependOnClassesThat().resideInAnyPackage(
  25. "..domain..",
  26. "..application..",
  27. "..infrastructure..",
  28. "..adapter.."
  29. );
  30. @ArchTest
  31. static final ArchRule infrastructure_should_not_depend_on_runtime_adapters = noClasses()
  32. .that().resideInAPackage("..infrastructure..")
  33. .should().dependOnClassesThat().resideInAnyPackage(
  34. "..adapter..",
  35. "..configuration.."
  36. );
  37. @ArchTest
  38. static final ArchRule new_domain_classes_should_not_depend_on_contracts = noClasses()
  39. .that().resideInAPackage("..domain..")
  40. .and(areNotNamed(CURRENT_DOMAIN_CONTRACT_DEBT))
  41. .should().dependOnClassesThat().resideInAPackage("..contracts..");
  42. @ArchTest
  43. static final ArchRule new_domain_classes_should_not_depend_on_jackson = noClasses()
  44. .that().resideInAPackage("..domain..")
  45. .and(areNotNamed(CURRENT_DOMAIN_JACKSON_DEBT))
  46. .should().dependOnClassesThat().resideInAnyPackage(
  47. "com.fasterxml.jackson.."
  48. );
  49. private static DescribedPredicate<JavaClass> areNotNamed(Set<String> simpleNames) {
  50. return new DescribedPredicate<>("are not named " + simpleNames) {
  51. @Override
  52. public boolean test(JavaClass input) {
  53. return !simpleNames.contains(input.getSimpleName());
  54. }
  55. };
  56. }
  57. }