0

是否有可能从 ArchUnit 测试中的分层测试条件中排除特定类?

我有包 A、B、C、D 定义如下:

<root>
+- A      <-- contains a factory class referring to B, C and D.
   +-B
   +-C
   +-D

包 A 包含由包 B、C 和 D 中的类使用和扩展的实用程序和基类。因此,规则应该是 A 中的类不得引用扩展包中的任何内容,除非 A 中有工厂类它指的是 B、C、D 中的一堆叶类。因此需要从该测试中排除工厂类。

ArchRule rule = Architectures.layeredArchitecture()
    .layer("A").definedBy("..a")
    .layer("B").definedBy("..a.b..")
    .layer("C").definedBy("..a.c..")
    .layer("D").definedBy("..a.d..")
    .whereLayer("A").mayOnlyBeAccessedByLayers("B", "C", "D", ... and others ...)
    .whereLayer("B").mayNotBeAccessedByAnyLayer() // except by "FactoryClass" in A
    .whereLayer("C").mayNotBeAccessedByAnyLayer() // except by "FactoryClass" in A
    .whereLayer("D").mayNotBeAccessedByAnyLayer() // except by "FactoryClass" in A

ArchUnit 中的“A 中的 FactoryClass 除外”- 条件中的一个短语怎么会出现?

希望我能把自己说清楚...

4

1 回答 1

0

您的架构层不一定必须与包 1:1 对应。
您可以使用从 A 层.layer("A").definedBy(DescribedPredicate<? super JavaClass>)中排除。FactoryClass

或者,您可以将其保留在 A 层中,但用于LayeredArchitecture.ignoreDependency排除其依赖项。

于 2021-02-11T20:59:28.097 回答