[英]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 來進行單元測試(這是一件好事)。 出於某種原因,您同時拖入 SpringRunner和Mockito 來幫助您。 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.