现有代码:
public void method() {
try {
fileItemReader = new FlatFileItemReader<EntityClass>();
String filePath = UtilityClass.getFilePath(getStepExecution().getJobParameters(), environment);
fileName = UtilityClass.getFileName(getStepExecution().getJobParameters(), environment);
filePath = UtilityClass.getFullFilePath(filePath, fileName);
fileItemReader.setResource(new FileSystemResource(filePath));
fileItemReader.setLineMapper(lineMapper());
fileItemReader.open(getStepExecutionContext());
LOGGER.info("FileReader initialized.");
}catch(Exception e) {
LOGGER.error("doBeforeStep Exception {}", e.getMessage());
}
}
请考虑以上代码。上面的代码将编写单元测试类。
UtilityClass.getFilePath(getStepExecution().getJobParameters(), environment);
我想像上面那样模拟上面的行:
PowerMockito.mockStatic(UtilityClass.class);
PowerMockito.when(UtilityClass.getFilePath(any(), any())).thenReturn("C:\\Input\\");
但是,当我在此测试用例中调试时,该控件进入方法getFilePath()内,因此,当它找不到某些父类方法值(在内部使用)时,它将引发NullPointerException。
测试类:
@RunWith(PowerMockRunner.class)
@PrepareForTest(UtilityClass.class)
public class FileReaderTest{
@InjectMocks
private FileReader underTest = new FileReader("FileReader", "");
@Mock
private FlatFileItemReader<PojoClass> fileItemReader;
@Test
public void testFileOpen() {
PowerMockito.mockStatic(UtilityClass.class);
PowerMockito.when(UtilityClass.getFilePath(any(), any())).thenReturn("C:\\Input\\");
PowerMockito.when(UtilityClass.getFileName(any(), any())).thenReturn("filename");
underTest.method();
}
}
上面定义了method()。正如我们在method()定义中看到的,这些语句:
fileName = UtilityClass.getFileName(getStepExecution().getJobParameters(), environment);
filePath = UtilityClass.getFullFilePath(filePath, fileName);
使用getStepExecution().getJobParameters()
作为参数。这些函数在定义method()的类的父类中定义。
因此,当我尝试模拟该语句时,它将尝试检索getStepExecution().getJobParameters()
的值,并在该值处抛出空指针。
感谢您的帮助。