簡體   English   中英

使用 @Service 測試 ConstraintValidator

[英]Test ConstraintValidator with @Service

我有這個我正在嘗試測試的 ConstraintValidator...

public class UniqueFurlValidator implements ConstraintValidator<Unique, String> {
    @Autowired
    private SponsorService sponsorService;

    public UniqueFurlValidator() {}

    @Override
    public void initialize(Unique unique) {
        unique.message();
    }

    @Override
    public boolean isValid(String furl, ConstraintValidatorContext context) {
        if (sponsorService != null && sponsorService.existsByFurl(furl)) {
            return false;
        }
        return true;
    }
}

到目前為止我寫的測試是......

@RunWith(SpringRunner.class)
@DataJpaTest
public class UniqueFurlValidatorTest {
    @Mock
    private EntityManager entityManager;

    @Autowired
    private SponsorService sponsorService;

    @InjectMocks
    private UniqueFurlValidator validator;

    @Before
    public void initMocks() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void alreadyExistsFurlReturnsError() {

    }
}

@Service鏈接到 JPA 存儲庫。 請就我如何實際測試它提出建議。

你有一個非常簡單的單個 class 來進行單元測試(這是一件好事)。 出於某種原因,您同時拖入 SpringRunnerMockito 來幫助您。 Spring 在這里是不必要的,因為這不是@DataJpaTest ,它是香草 Java class。

@RunWith(MockitoJUnitRunner.class)
public class UniqueFurlValidatorTest {
    @Mock
    private SponsorService sponsorService;

    @InjectMocks
    private UniqueFurlValidator validator;

    @Test
    public void alreadyExistsFurlIsInvalid() {
      // Given:
      given(sponsorService.existsByFurl("EXISTS")).returns(true);
      // Then:
      assertThat(validator.isValid("EXISTS", null), is(false) );
    }

    @Test
    public void newFurlIsValid() {
      assertThat(validator.isValid("NEW", null), is(true) );
    }

}

我沒有為sponsorService添加測試,因為那不應該是真正的運行時邏輯。 它不太可能發生(Spring 將在 Context 初始化期間退出)並且無論如何最好在構造函數中斷言。

暫無
暫無

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

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