Я играю с Mockito и Spring MVC. Я пытаюсь написать модульные тесты для кода, который я только что написал.Как проверить эти методы (из уровня сервиса)
Это мой CategoryService класс:
@Service
public class CategoryService {
@Autowired
@Qualifier("categoryDaoImpl")
private CategoryDao categoryDao;
public void addCategory(Category category) {
category.setId(getLastCategoryId() + 1);
categoryDao.addCategory(category);
}
public Category getCategoryById(int id) {
return categoryDao.getCategoryById(id);
}
public List<Category> getCategories() {
return categoryDao.getAllCategories();
}
public int getCategoriesCount() {
return categoryDao.getCategoriesCount();
}
public int getLastCategoryId() {
if (categoryDao.getAllCategories().size() == 0) {
return 0;
}
return Collections.max(categoryDao.getAllCategories()).getId();
}
public CategoryDao getCategoryDao() {
return categoryDao;
}
public void setCategoryDao(CategoryDao categoryDao) {
this.categoryDao = categoryDao;
}
Я уже опробовал CategoryDao с охватом почти 100%.
А теперь я хочу проверить CategoryService, но я не знаю, как проверить это, я имею в виду такие методы, как: addCategory, getCategoryById, getAllCategories, getCategoiesCount и т.д.
Они просто говорить с шаблоном DAO, но что, если другой человек изменит свою логику? Я был бы рад, если бы вы сказали мне или показали, как писать тесты для таких коротких методов.
Что касается CategoryService, то я только написал тесты для getLastCategoryId():
@Test
public void shouldGetLastCategoryIdWhenListIsEmpty() {
//given
List<Category> list = new ArrayList<Category>();
Mockito.when(categoryDao.getAllCategories()).thenReturn(list);
//when
int lastCategoryId = categoryService.getLastCategoryId();
//then
assertThat(lastCategoryId, is(0));
}
@Test
public void shouldGetLastCategoryIdWhenListIsNotEmpty() {
//given
List<Category> list = new ArrayList<Category>();
list.add(new Category(1, "a", "a"));
list.add(new Category(3, "a", "a"));
list.add(new Category(6, "a", "a"));
Mockito.when(categoryDao.getAllCategories()).thenReturn(list);
//when
int lastCategoryId = categoryService.getLastCategoryId();
//then
assertThat(lastCategoryId, is(6));
}
Большое спасибо за помощь :)
С уважением, Том
Это отличный пример того, почему использовать инъекцию конструктора вместо инъекции поля: вы можете просто создать служебный объект с помощью макета DAO от Mockito или Spock и проверить соответствующие взаимодействия. (Я бы также предложил посмотреть Spring Data вместо написания собственных классов DAO.) – chrylis