21
Июл
2021

Как "замокать" объект, используемый внутри класса?

Всем привет! Есть класс RegionController, в нём создаётся экземпляр класса DBRegionRepositoryImpl. В RegionController вызывается метод getAll(), который в свою очередь вызывает метод getAll() экземпляра репозитория. Необходимо протестировать данный класс, "замокав" экзмепляр репозитория. Подскажите, пожалуйста, как это правильно сделать?

public class RegionController {

    private final RegionRepository regionRepository;

    public RegionController() {
        this.regionRepository = new DBRegionRepositoryImpl();
    }
    public List<Region> getAll() {
        return regionRepository.getAll();
    }

Вот мой нерабочий тест:

@RunWith(MockitoJUnitRunner.class)
public class RegionControllerTest {
    @Mock
    private RegionRepository regionRepository;
    @InjectMocks
    private RegionController regionController;

    @Before
    public void setUp() {
        List<Region> regions = new ArrayList<>();
        Region region = new Region("US");
        region.setId(1L);
        regions.add(region);
        when(regionRepository.getAll()).thenReturn(regions);

    @Test
    public void getAllTest() {
        List<Region> regionsForTest = new ArrayList<>();
        Region region = new Region("US");
        region.setId(1L);
        regionsForTest.add(region);
        List<Region> regions = regionController.getAll();
        assertEquals(regionsForTest.size(), regions.size());
        assertEquals(regionsForTest.get(0).getId(),
                regions.get(0).getId());
        assertEquals(regionsForTest.get(0).getName(),
                regions.get(0).getName());
       verify(regionRepository).getAll();
    }

Программа реализована через hibernate. При запуске теста выводятся логи hibernate и запрос к БД, но по идее такого быть не должно.

Источник: https://ru.stackoverflow.com/questions/1307289/%D0%9A%D0%B0%D0%BA-%D0%B7%D0%B0%D0%BC%D0%BE%D0%BA%D0%B0%D1%82%D1%8C-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC%D1%8B%D0%B9-%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B8-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0

Тебе может это понравится...

Добавить комментарий