Не удалось обнаружить расположение ресурса по умолчанию для тестового класса - PullRequest
0 голосов
/ 07 ноября 2019

Я хочу реализовать тест JUnit 5 для тестирования сервисов:

Репозиторий JPA:

@Repository
public interface RiskFilterRepository extends JpaRepository<RiskFilters, Integer> {
    .....
}

Сервисный интерфейс:

public interface RiskFilterService {
    ......
}

Реализация сервиса:

@Service
@Qualifier("riskFilterService")
@Transactional
public class RiskFilterServiceImpl implements RiskFilterService {

    @PersistenceContext
    private EntityManager entityManager;

    @Autowired
    private RiskFilterRepository dao;
    ...
}

Сервис для тестирования:

@Service
public class BinCountryCheckFilterImpl {

    @Autowired
    @Qualifier("riskFilterService")
    private RiskFilterService riskFilterService;

    public void validateBinCountryCheckFilter() throws JAXBException, JsonProcessingException {
        ......
    }
}

JUnit test

    @RunWith(SpringRunner.class)
    @SpringBootTest
    @Transactional
    public class BinCountryCheckFilterImplTest    {

        @Autowired
        @Qualifier(value = "entityManager")
        EntityManager manager;

        @Autowired
        private RiskFilterRepository repository;

        @BeforeEach
        public void beforeEachTest() throws IOException {
            MockitoAnnotations.initMocks(this); 
        }

        @Test
        public void testBinCountryCheckFilterImpl() throws JsonProcessingException, JAXBException {
           ....
        }    
    }

Я получаю эту ошибку при запускеКод JUnit:

 Could not detect default configuration classes for test class [org.datalis.rest.api.server.filter.bincountrycheck.BinCountryCheckFilterImplTest]: BinCountryCheckFilterImplTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.

Знаете ли вы, как правильно выполнить этот тест?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Исходя из вашего вопроса в ответе @reflexdemon, вы можете сделать что-то вроде этого, чтобы высмеивать ваш репозиторий / сервис:

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import java.util.List;

import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.Mockito.when;

public class BinCountryCheckFilterImplTest {

    @Mock
    private RiskFilterRepository riskFilterRepository;

    @BeforeEach
    public void beforeEachTest() throws IOException {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testBinCountryCheckFilterImpl() throws JsonProcessingException, JAXBException {

    // Instruct the mock what to return when RiskFilterRepository#findAll is called
    when(riskFilterRepository.findAll()).thenReturn(List.of());

    // Call that instructed method
    List<RiskFilters> riskFilters = riskFilterRepository.findAll();

    assertNotNull(riskFilters);
    }
}

Не используйте @SpringBootTest, если вам это не нужнопотому что он загружает весь контекст приложения. Для получения дополнительной информации см. эту ссылку .

0 голосов
/ 07 ноября 2019

Пожалуйста, не забудьте добавить класс применения пружин на одну упаковку меньше.

package org.datalis.rest;// <-- This is very important. Thus, component scan will have the right configuration.
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
...