У меня есть класс обслуживания, который вызывает метод Repository и возвращает List.Теперь я хочу издеваться над этим.Мой сценарий модульного тестирования будет выглядеть следующим образом:
- Добавить несколько фиктивных объектов в хранилище фиктивных
- Класс обслуживания запросов, который возвращает список фиктивных объектов
- Размер списка утверждений
Мой класс хранилища:
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface FoodRepository extends CrudRepository<Food, Long> {
@Query(value = "SELECT * FROM FOOD WHERE FRESH = 1", nativeQuery = true)
public List<Food> getMostFreshestFoods();
}
Мой класс обслуживания:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class FoodService {
@Autowired
private FoodRepository foodRepository;
public List<Food> getMostFreshestFoods() {
return foodRepository.getMostFreshestFoods();
}
}
Мой класс объекта:
public class Food {
private Long id;
private String foodName;
private boolean fresh;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFoodName() {
return foodName;
}
public void setFoodName(String foodName) {
this.foodName = foodName;
}
public boolean isFresh() {
return fresh;
}
public void setFresh(boolean fresh) {
this.fresh = fresh;
}
}
И мой тесткласс:
import myapp.Food;
import myapp.FoodRepository;
import myapp.FoodService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNull.notNullValue;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.verify;
@RunWith(MockitoJUnitRunner.class)
public class FoodTest {
@Mock
private FoodRepository foodRepository;
@InjectMocks
private FoodService foodService;
@Captor
private ArgumentCaptor<Food> foodArgumentCaptor;
@Test
public void testFreshestFoods() {
Food food = new Food();
food.setFoodName("Meat");
food.setFresh(true);
foodRepository.save(food);
verify(foodRepository).save(foodArgumentCaptor.capture());
assertThat(foodArgumentCaptor.getValue().getId(), is(notNullValue()));
// Above I added mock data to database to query list from Service class method,
// but I do not know how to do it. Using return always gives error
// I want to do the following: Query the list from FoodService class and it should
// return size 1 (the fake object (added above) )
}
}
Но так как я новичок в Mockito, это немного сложно для меня.Я хотел бы знать, как я могу получить список из класса FoodService, и он должен возвращать поддельный объект, созданный в тестовом классе.