я пишу 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. Я просто хочу издеваться над объектами.
Может кто-нибудь помочь?
@Qualifier
на поле. Кроме того, когда вы издеваетесь над всем, какой смысл вообще использовать тест на основе Spring Boot? - person M. Deinum   schedule 04.10.2018setUp()
, но его код действительно довольно запутанный, поскольку он сочетает в себе некоторые части запуска теста на основе загрузки Spring и некоторые части теста Mockito / простого JUnit. - person g00glen00b   schedule 04.10.2018MockitoJUnitRunner
для запуска теста и разместите аннотации@Mock
в полях, которые необходимо имитировать, и просто запустите тест. Вы пытаетесь обойти фреймворки и даже добавляете больше фреймворков, чтобы решить то, что не должно решаться в первую очередь. - person M. Deinum   schedule 04.10.2018