Я хочу отредактировать этот код, чтобы использовать макет для служб. Этот код работает нормально:
@Service
public class BinCountryCheckFilterImpl {
private RiskFilterService riskFilterService;
private Terminals terminal;
@Autowired
public BinCountryCheckFilterImpl(Terminals terminal, RiskFilterService riskFilterService) {
this.terminal = terminal;
this.riskFilterService = riskFilterService;
}
public void validateBinCountryCheckFilter(Terminals terminal) throws JAXBException, JsonProcessingException {
List<RiskFilters> filter_list = riskFilterService.findRiskFiltersByTerminalIdAndType(terminal.getId(), "BinCountryCheckFilter");
}
}
JUnit test:
public class BinCountryCheckFilterImplTest {
@Test
public void testBinCountryCheckFilterImpl() throws JsonProcessingException, JAXBException {
//Arrange
RiskFilterService riskFilterService = Mockito.mock(RiskFilterService.class);
Terminals terminal = Mockito.mock(Terminals.class);
BDDMockito.given(
riskFilterService.findRiskFiltersByTerminalIdAndType(anyInt(), anyString()))
.willReturn(riskFiltersList);
int expectedInt = 11;
String expectedString = "BinCountryCheckFilter";
when(terminal.getId()).thenReturn(expectedInt);
BinCountryCheckFilterImpl binCountryCheckFilterImpl =
new BinCountryCheckFilterImpl(terminal, riskFilterService);
//Act
binCountryCheckFilterImpl.validateBinCountryCheckFilter();
//Assert
then(riskFilterService)
.should()
.findRiskFiltersByTerminalIdAndType(expectedInt, expectedString);
}
}
Этот код НЕ работает:
@Service
public class BinCountryCheckFilterImpl {
@Autowired
@Qualifier("riskFilterService")
private RiskFilterService riskFilterService;
public Response validateBinCountryCheckFilter(Merchants merchant, Contracts contract, Terminals terminal,
PaymentTransaction message, HttpServletRequest request) throws JAXBException, JsonProcessingException {
...........
}
}
По какой-то причине riskFilterService
в пустомкогда я запускаю тест JUnit. Есть ли способ правильно реализовать сервис с помощью теста JUnit? В моем случае я не хочу вызывать terminal
из конструктора, а из метода Java validateBinCountryCheckFilter(...)
и riskFilterService
в качестве службы Autowired.
Одиночный компонент BinCountryCheckFilterImpl не может иметь терминал значения для каждого запросакак поле, то есть как параметр в конструкторе, когда код развернут, но он работает с тестом JUnit. Если значение терминала должно быть передано как параметр метода, код JUnit не будет работать.
Не могли бы вы посоветовать, пожалуйста?