Я пишу модульные тесты, чтобы проверить, работает ли проверка входных данных в моем репозитории Spring, но это не похоже на это.
Проще говоря, у меня есть класс репозитория:
@Repository
public class CustomerRepository {
// Java client for Redis, that I extend as JedisConnector in order to make it a Bean
private Jedis jedis;
@Autowired
public CustomerRepository(JedisConnector jedis) {
this.jedis = jedis;
}
private <S extends Customer> S save(@Valid S customer) throws CustomerException {
try {
this.jedis.set(...); // writing to Redis (mocked in test)
return customer;
} catch (JsonProcessingException e) {
throw new CustomerException(e.toString());
}
}
}
При этом используется следующий класс модели:
@AllArgsConstructor
@NoArgsConstructor
@Data // from Lombok
public class Customer {
@Email(message = "Email must be valid.")
private String identifier;
@NotBlank(message = "Password cannot be null or empty string.")
private String password;
@URL(message = "URL must be a url.")
private String url;
}
Поэтому я написал подобный тестовый модуль, ожидая, что он выдаст исключение, которое я могу утверждать:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {JedisConnector.class})
public class CustomerRepositoryTest {
// Cannot autowire because dependent bean needs to be configured
private CustomerRepository customerRepository;
@MockBean
JedisConnector jedisConnector;
@Before
public void setUp() {
// Configure Mock JedisConnector
MockitoAnnotations.initMocks(this);
Mockito.when(jedisConnector.select(anyInt())).thenReturn("OK");
// Manually wire dependency
customerRepository = new CustomerRepository(jedisConnector);
}
@Test
public void saveShouldFailOnInvalidInput() throws CustomerException {
Mockito.when(jedisConnector.set(anyString(), anyString())).thenReturn("OK");
// Blatantly invalid input
Customer customer = new Customer("testemail", "", "testurl");
customerRepository.save(customer);
}
}
Но он просто проходит, выводит только отладочные сообщения (которые я пропустил в этом вопросе). Как применить проверку? Если возможно, я бы хотел избежать явного вызова валидатора в каждом методе хранилища.
Я видел много примеров в Интернете, которые япопытался воспроизвести (от Baeldung до DZone, конечно, на этом же сайте было много вопросов, включая этот интересный ), но все еще безуспешно. Чего мне не хватает?