Реализовать тест JUnit для Spring Service - PullRequest
0 голосов
/ 31 октября 2019

Я хочу реализовать тест JUUNit для этой службы Spring:

        @Service
        public class BinCountryCheckFilterImpl {

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

            @Autowired
            @Qualifier("binlistsService")
            private BinlistsService binlistsService;

            public BinCountryCheckFilterImpl() {        
            }

            public PaymentResponse validateBinCountryCheckFilter(Merchants merchant, Contracts contract, Terminals terminal,
                      PaymentTransaction message, HttpServletRequest request) throws JAXBException, JsonProcessingException {

                     List<RiskFilters> filter_list = riskFilterService.findRiskFiltersByTerminalIdAndType(terminal.getId(), "BinCountryCheckFilter");

                     Optional<BinLists> db_bin_list = binlistsService.findByName(billing_address_country);
             }
       }

Я пробовал этот тест JUnit:

public class BinCountryCheckFilterImplTest {

    @InjectMocks
    private BinCountryCheckFilter binCountryCheckFilter;

    private BinlistsService binlistsService = Mockito.mock(BinlistsService.class);  
    private RiskFilterService riskFilterService = Mockito.mock(RiskFilterService.class);

    @Mock
    List<RiskFilters> riskFiltersList = null;

    Optional<BinLists> binList = null;

    @BeforeEach
    public void beforeEachTest() throws IOException {

        MockitoAnnotations.initMocks(this);             
        riskFiltersList = new ArrayList<RiskFilters>(); 

        RiskFilters filter = new RiskFilters();
        riskFiltersList.add(filter);    

        BinLists binLists = new BinLists();
        binList = Optional.of(binLists);
    }

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

        when(riskFilterService.findRiskFiltersByTerminalIdAndType(anyInt(), anyString())).thenReturn(riskFiltersList);
        when(binlistsService.findByName(anyString())).thenReturn(binList);

        List<RiskFilters> filter_list = riskFilterService.findRiskFiltersByTerminalIdAndType(11, "BinCountryCheckFilter");

        Optional<BinLists> bin = binlistsService.findByName("US");

        BinCountryCheckFilterImpl binCountryCheckFilterImpl = new BinCountryCheckFilterImpl();

        binCountryCheckFilterImpl.validateBinCountryCheckFilter(merchant, contract, terminal, authorizeTransactiontMockup(), request);
    }

Код работает нормально, когда я пытаюсь смоделировать запросыс when ..... но происходит сбой, когда я вызываю реальную службу Spring для проверки ее с помощью NPE в этой строке в классе Java службы BinCountryCheckFilterImpl:

List<RiskFilters> filter_list = riskFilterService.findRiskFiltersByTerminalIdAndType(terminal.getId(), "BinCountryCheckFilter");

Как я могу смоделировать этот SQL-запрос?

1 Ответ

0 голосов
/ 31 октября 2019

Я предполагаю, что riskFilterService является интерфейсом и / или пружинным хранилищем.

Можете ли вы попробовать макет как:

doReturn(riskFiltersList).when(riskFilterService).findRiskFiltersByTerminalIdAndType(any(), any()));

Это (doReturn / when) в значительной степени избегает вызоваметод по сравнению с когда / возврат

https://stackoverflow.com/a/29394497/2931410

...