2

次の階層があります。

public class A extends B {
   @Valid 
   public A(String languageCode, C token) {
      super(languageCode, token);
   }  
}

B クラスには、サービスに @Validated({RequiringLanguageCode.class}) がある場合にのみ、@NotEmpty で検証する必要があるプロパティ呼び出し言語コードがあります。

 public class B extends D {

    private String languageCode;

    @Valid
    public B(String languageCode, C token) {
        super(token);
        this.languageCode = languageCode;
    }

    @NotEmpty(groups = {RequiringLanguageCode.class})
    public String getLanguageCode() {
        return languageCode;
    }
}

ここで、D は、NotNull として検証する必要がある C プロパティと、C クラス内にある値を持つ基本クラスです。

public class D {

    private C token;

    @Valid
    public D(C token) {
        this.token = token;
    }

    @NotNull
    public C getToken() {
        return token;
    }
}

C クラスには、@NotEmpty として検証される 2 つの文字列が含まれています。

public class C {

    private String value1;

    private String value2;

    public C(String value1,
            String value2) {
        this.value1 = value1;
        this.value2 = value2;
    }

    @NotEmpty
    public String getValue1() {
        return value1;
    }

    @NotEmpty
    public String getValue2() {
        return value2;
    }
}

これを mockito を使用してテストしようとすると、トークン値 (value1 と value2) が空の場合、C クラスの値は検証されません。

誰か助けてくれませんか? 誰かが何が起こっているのかについて何か考えがありますか?

テストは次のとおりです。

@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles("test")
public class ATest {

    @Autowired
    private AAssembler aAssembler;

    @Mock
    A request;

    @Mock
    C token;

    @Test
    public void test() {
        when(token.getValue1()).thenReturn("");
        when(token.getValue2()).thenReturn("key");
        when(request.getToken()).thenReturn(token);
        assertThatIllegalArgumentException()
           .isThrownBy(() -> aAssembler.build(request));
    }
}

AAssembler には @Validated({RequiringLanguageCode.class}) という注釈が付けられます

ConstraintViolationException の代わりに IllegalArgumentException を起動する理由は、この問題の範囲外です。制約違反をキャッチし、代わりに IllegalArgumentException をスローします。

アセンブラーのビルド メソッドには、次の注釈が付けられた制約もあります。

public Response build(@Valid @NotNull A request) {
....
} 

誰かが私を助けてくれれば、とても感謝しています。とにかくありがとう。

4

1 に答える 1