Я получаю исключение нулевого указателя, когда вызываю метод вставки на уровне поставщика данных модульного теста. И при вызове метода вставки в методе main в файле реализации провайдера возникает исключение нулевого указателя.
Почему возникает исключение нулевого указателя? Mapper не применяется @Autowired?
пружина 5.1.6, mybatis 3.5.1, junit 4.12 mockito-core 2.23.4
Я попытался создать успокоительный API и проверить. метод вставки работает правильно.
И я использовал @RunWith (MockitoJUnitRunner.class) на testFile.java и использовал аннотацию @Mock на маппере.
Тогда исключение нулевого указателя не происходит, но значение не сохраняется в фактической базе данных .. (очевидно?)
Я не знаю, как найти сохраненное значение и написать контрольный пример.
(Восстановить / вставить вставку, обновление сопоставления отличается.)
DataCollectProviderImpl.java
@Component
public class DataCollectProviderImpl implements DataCollectProvider {
@Autowired
private DataCollectMapper dataCollectMapper;
@Override
public String registerCollectData(HospitalDataCollectionInfo hospitalDataCollectionInfo) {
dataCollectMapper.insertCollectData(hospitalDataCollectionInfo); <---null pointer exception
return hospitalDataCollectionInfo.getDataCollectId();
}
public static void main(String[] args) {
DataCollectProvider dcp = new DataCollectProviderImpl();
HospitalDataCollectionInfo hospitalDataCollectionInfo = new HospitalDataCollectionInfo();
hospitalDataCollectionInfo.setDataCollectId("Testtttt");
hospitalDataCollectionInfo.setDiseaseCode("A");
hospitalDataCollectionInfo.setDataStateCode("1");
hospitalDataCollectionInfo.setHospitalCode("A");
hospitalDataCollectionInfo.setCollectedCount(1);
hospitalDataCollectionInfo.setCollectedCount(1);
hospitalDataCollectionInfo.setBaseDateTime("123456");
hospitalDataCollectionInfo.setBaseDateTimeSequence(1);
hospitalDataCollectionInfo.setCollectEndDateTime("1234");
hospitalDataCollectionInfo.setCollectStartDateTime("1234");
hospitalDataCollectionInfo.setCreateDateTime("123");
hospitalDataCollectionInfo.setUpdateDateTime("123");
dcp.registerCollectData(hospitalDataCollectionInfo);
}
}
test.java
public class DataCollectProviderTest {
@Autowired
private DataCollectMapper dataCollectMapper;
@Test
public void registerCollectDataTest() {
HospitalDataCollectionInfo insertData = (HospitalDataCollectionInfo) setClassFields(new HospitalDataCollectionInfo());
dataCollectMapper.insertCollectData(insertData); <---null pointer exception
}
private Object setClassFields(Object object) {
try {
Class clazz = object.getClass();
Field[] fields = clazz.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
field.setAccessible(true);
if (field.getType() == Integer.TYPE) {
field.set(object, i);
} else {
field.set(object, "Test" + (999 - i));
}
}
return clazz.cast(object);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
}
Я ожидаю, что данные могут быть вставлены и читать данные нормально.
но исключение нулевого указателя происходит в методе вставки.