簡體   English   中英

Archunit 檢查方法調用

[英]Archunit check method calls

我有一個 class,它有三個不應從某些類調用的方法。

我怎樣才能用 Archunit 檢查這個?

例如

public class Foo {

   public void method1() {
   }

   public void method2() {
   }

   public void method3() {
   }
}

method1 和 method2 只能由類 Bar1 和 Bar2 調用。

我有一個非常相似的要求並想出了這個:

@ArchTest
    public static final ArchRule rule = noClasses()
            .that(not(name(Bar1.class.getName()))
                          .and(not(name(Bar2.class.getName()))))
            .should().callMethodWhere(target(nameMatching("method1"))
                                              .and(target(owner(assignableTo(Foo.class)))))
            .orShould().callMethodWhere(target(nameMatching("method2"))
                                              .and(target(owner(assignableTo(Foo.class)))));

我沒有測試過,但我認為應該很接近。

編輯:進口是:

import com.tngtech.archunit.junit.AnalyzeClasses;
import com.tngtech.archunit.junit.ArchTest;
import com.tngtech.archunit.lang.ArchRule;

import static com.tngtech.archunit.base.DescribedPredicate.not;
import static com.tngtech.archunit.core.domain.JavaCall.Predicates.target;
import static com.tngtech.archunit.core.domain.JavaClass.Predicates.assignableTo;
import static com.tngtech.archunit.core.domain.properties.HasName.Predicates.name;
import static com.tngtech.archunit.core.domain.properties.HasName.Predicates.nameMatching;
import static com.tngtech.archunit.core.domain.properties.HasOwner.Predicates.With.owner;
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;

import com.tngtech.archunit.lang.ArchRule;

import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;
import static com.tngtech.archunit.lang.conditions.ArchConditions.callMethod;

您可以使用

ArchRule rule = noClasses()
    .that().doNotHaveFullyQualifiedName(Bar1.class.getName())
    .and().doNotHaveFullyQualifiedName(Bar2.class.getName())
    // alternative 1:
    .should().callMethod(Foo.class, "method1")
    .orShould().callMethod(Foo.class, "method2");
    // alternative 2:
    // .should(callMethod(Foo.class, "method1").or(callMethod(Foo.class, "method2")));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM