Я хочу реализовать тест 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 BinCountryCheckFilterImpl(Terminals terminal) {
this.terminal = terminal;
}
public void validateBinCountryCheckFilter() throws JAXBException, JsonProcessingException {
List<RiskFilters> filter_list = riskFilterService.findRiskFiltersByTerminalIdAndType(terminal.getId(), "BinCountryCheckFilter");
}
}
JUnit test
public class BinCountryCheckFilterImplTest {
@Autowired
private RiskFilterRepository repository;
@BeforeEach
public void beforeEachTest() throws IOException {
MockitoAnnotations.initMocks(this);
}
@Test
public void testBinCountryCheckFilterImpl() throws JsonProcessingException, JAXBException {
// this mock is working fine
BDDMockito.given(riskFilterService.findRiskFiltersByTerminalIdAndType(anyInt(), anyString())).willReturn(riskFiltersList);
// this mock is working fine - I don't get NPE
List<RiskFilters> filter_list = riskFilterService.findRiskFiltersByTerminalIdAndType(11, "BinCountryCheckFilter");
// this mock is working fine
BinCountryCheckFilterImpl binCountryCheckFilterImpl = new BinCountryCheckFilterImpl(terminal);
// I get NPE here
binCountryCheckFilterImpl.validateBinCountryCheckFilter();
}
}
Я получаю ошибку NPE при запускеКод JUnit для этого метода Java validateBinCountryCheckFilter()
.
List<RiskFilters> filter_list = riskFilterService.findRiskFiltersByTerminalIdAndType(11, "BinCountryCheckFilter");
Итак, первый раз, когда я запускаю код с BDDMockito.given....
, смоделированный SQL-запрос riskFilterService.findRiskFiltersByTerminalIdAndType....
работает нормально. Но после этого второго раза, когда я запускаю binCountryCheckFilterImpl.validateBinCountryCheckFilter();
, я получаю NPE для кода riskFilterService.findRiskFiltersByTerminalIdAndType....
Знаете ли вы, как я могу решить эту проблему?