Должен ли я отделить тестовые функции, которые вызывают ошибку, от тестового интерфейса?
Я новичок в JUnit. Я пытаюсь написать модульный тест простого класса обслуживания "ProductService". Вот мои тестовые коды для "ProductService"
public interface TestProductService {
void shouldCreateProduct() throws EntityIsAlreadyCreatedException;
void shouldDeleteProductById() throws EntityNotfoundException;
void shouldUpdateProduct();
void shouldFindProductById() throws EntityNotfoundException;
void shouldFindAllProducts() throws EntityNotfoundException;
void shouldThrowErrorWhenFindAllProductsWhichAreNotInDB();
void shouldThrowErrorWhenFindProductWhichAreNotInDB() throws EntityNotfoundException;
void shouldThrowErrorWhenDeleteProductWhichIsNotInDB() throws EntityNotfoundException;
void shouldThrowErrorWhenCreateProductWhichIsAlreadyInDB() throws EntityIsAlreadyCreatedException;
}
Как видите, некоторые функции могут вызывать ошибку. Кроме того, другие функции тестируют простые операции "CRUD". Следует ли разделять функции, которые могут вызывать ошибку, на другой интерфейс? Если я разделю их, могу ли я обеспечить разделение интерфейсов? Спасибо за вашу помощь.
1 ответ
Разделение интерфейса должно выполняться на основе функциональности. Если вы рассматриваете это как принцип, "клиенты, реализующие интерфейс, не должны зависеть от интерфейсов, которые они не используют". Это означает, что было хорошо иметь отдельный интерфейс для каждой функции, а не подталкивать клиента к реализации несвязанных функций. Но в вашем случае мне любопытно, зачем у вас интерфейс для тестов, какую пользу он принесет вам... Даже если вы это сделаете, это не обязательно должен быть отдельный интерфейс для сценариев выдачи ошибок. Довольно хороший дизайн теста - это сопоставление один-к-одному для реализации класса, для которого вы создаете тесты.
ProductService >> TestProductService or ProductServiceTest