我有以下具有以下功能之一的Java类
public class DatasetFunctionality {
public void appendDataFrame(Dataset target, Dataset source, String path) {
source.write().format("parquet").mode(SaveMode.Append).save(path);
}
}
我想使用模拟(1.10.19)测试此功能。相同的代码段是:-
public class DatasetFunctionalityTest{
@Spy
DatasetFunctionality dsFunc= new DatasetFunctionality();
@Test
public void appendDataFrame() {
Dataset sourceFrame = mock(Dataset.class);
Dataset targetFrame = mock(Dataset.class);
when(sourceFrame.write()).thenReturn(mock(DataFrameWriter.class));
when(sourceFrame.write().format("parquet")).thenReturn(mock(DataFrameWriter.class));
when(sourceFrame.write().format("parquet").mode(SaveMode.append)).thenReturn(mock(DataFrameWriter.class));
doNothing().when(sourceFrame.write().format("parquet").mode(SaveMode.append)).save(anyString()));
dsFunc.appendDataFrame(targetFrame,sourceFrame);
}
}
我得到的错误是
org.mockito.exceptions.base.MockitoException: Cannot mock/spy class com.project.Utilities Mockito cannot mock/spy because : - final class
我知道DataFrameWriter是最后一个类,因此我们不能使用模仿1来模拟它。但是,我没有灵活性将模仿2升级到2,我也不想使用PowerMock。
有什么方法可以实现这个junit模拟吗?我愿意接受其他模拟或测试此功能的方法。