如何模拟内部使用父类方法的方法

时间:2019-11-27 02:51:27

标签: junit mockito junit4 powermockito

现有代码:

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()的值,并在该值处抛出空指针。

感谢您的帮助。

0 个答案:

没有答案