@Mockbean с бросками @Qualifer во время тестового прогона Junit

я пишу junits для класса ниже,

@Repository
public class IncidentRepository {

    @Autowired
    @Qualifier("mysqlJdbcTemplate")
    private JdbcTemplate mysqlJdbcTemplate;


    @Autowired
    @Qualifier("oracleJdbcTemplate")
    private JdbcTemplate oracleJdbcTemplate;

    private String tableName = "BSC_INCIDENT_STG_3";


    public String getTableName() {
        return tableName;
    }

    public List<Incident> listAll() {
        String cprSql = "SELECT 1 FROM DUAL";
        return oracleJdbcTemplate.query(cprSql, new IncidentMapper());

    }
}

и класс Junit, над которым я работаю, таков:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = CommonConfig.class)
public class IncidentRepositoryTest {

    private final Logger log = LoggerFactory.getLogger(Application.class);

    @InjectMocks
    IncidentRepository incidentRepository;

    @Qualifier("mysqlJdbcTemplate")
    private JdbcTemplate mysqlJdbcTemplate;

    @Qualifier("oracleJdbcTemplate")
    private JdbcTemplate oracleJdbcTemplate;

    @MockBean
    private Incident incident;

@MockBean
    private IncidentMapper incidentMapper;

    private String deleteSqlQuery = "DELETE FROM ";

    String cprSql = "SELECT 1 FROM DUAL";

    List<Incident> incidentList = new ArrayList<Incident>();

    @Before
    public void setUp() throws Exception {
        //All Initializations goes here.
        MockitoAnnotations.initMocks(this);     
        mysqlJdbcTemplate = Mockito.mock(JdbcTemplate.class);
        oracleJdbcTemplate = Mockito.mock(JdbcTemplate.class);

        incident.setIncidentNumber("incidentNumber");
        incident.setApplicationId("J12342");
        incident.setCategory("O12987");
        incident.setOpenTime("ApplicationName");
        incident.setSeverityCode("OwningLob");
        incident.setAssignment("reportingCIOLOB");
        incident.setStatus("reportingCTOGroup");
        incident.setCloseTime("rto");
        incident.setStatus("status");
        incident.setElapsedTime("assetName");
        incident.setResolutionCode("environment");
        incident.setType("invNo");
        incident.setOpenGroup("osiStatus");
        incident.setResolvedGroup("measuredID");
        incident.setResolvedTime("policyID");
        incident.setUserPriority("policyName");
        incident.setJpAcctLob("lastBreakDate");
        incident.setJpAcctAppRto("lastClearedDate");
        incident.setJpImpact("osiStatus");
        incident.setJpImpactDurationMin("measuredID");
        incident.setJpExternalId("policyID");
        incident.setJpExternalSystem("policyName");
        incident.setJpConfigItem("lastBreakDate");
        incident.setJpMasterHost("lastClearedDate");
        incident.setJpSite("osiStatus");
        incident.setJpAppserviceName("measuredID");
        incident.setJpAppserviceId("policyID");
        incident.setJpVerumidentifier("policyName");

        incidentList.add(incident);

    }

    @Test
    public void testListAll() throws Exception {

when(oracleJdbcTemplate.query(cprSql,incidentMapper)).thenReturn(incidentList);
        incidentRepository.listAll();       
    }
}

Теперь проблема в том, что объект mysqlJdbcTemplate всегда имеет значение null в классе IncidentRepository, даже когда я издевался над ним.

Я не хочу, чтобы вы аннотировали @Autowired. Я просто хочу издеваться над объектами.

Может кто-нибудь помочь?


person chandu15081990    schedule 04.10.2018    source источник
comment
Вы ничего не издеваетесь. У вас есть только @Qualifier на поле. Кроме того, когда вы издеваетесь над всем, какой смысл вообще использовать тест на основе Spring Boot?   -  person M. Deinum    schedule 04.10.2018
comment
@ M.Deinum Он издевается над ними в методе setUp(), но его код действительно довольно запутанный, поскольку он сочетает в себе некоторые части запуска теста на основе загрузки Spring и некоторые части теста Mockito / простого JUnit.   -  person g00glen00b    schedule 04.10.2018
comment
Для Spring Boot он не издевается над ними. Следовательно, от этого POV нет насмешек. Он в основном обходит все...   -  person M. Deinum    schedule 04.10.2018
comment
извините за опечатки...   -  person chandu15081990    schedule 04.10.2018
comment
я решил это, настроив квалификатор с помощью whitebox!!.. Whitebox.setInternalState(incidentRepository, mysqlJdbcTemplate, mysqlJdbcTemplate);   -  person chandu15081990    schedule 04.10.2018
comment
Вы слишком все усложняете. Удалите всю пружинную загрузку. Используйте MockitoJUnitRunner для запуска теста и разместите аннотации @Mock в полях, которые необходимо имитировать, и просто запустите тест. Вы пытаетесь обойти фреймворки и даже добавляете больше фреймворков, чтобы решить то, что не должно решаться в первую очередь.   -  person M. Deinum    schedule 04.10.2018