如何模拟某个类的任何对象。
我希望任何文件对象在调用true
时返回exists()
。
类似的东西:
Mockito.mock(File.class)
//return true for any object of File that calls exist()
File file = new File("thisDoesntExist");
assertEquals(true, file.exists());
如何做到这一点?
这是测试中的方法(缩减)
@Override
public void load(InputArchive archive, int idx)
{
archive.beginNode("Files", idx);
File file = new File(archive.load("Path"));
if(file.exists())
{
//if it gets here it'll pass the test
}
}
我认为以上内容将解决我的问题,但如果有更好/替代方法来解决我的问题,我会告诉你为什么我要这样做:
我想要这样做的原因是我正在读取一个基于标签创建文件的XML,然后它会测试这个fileObjectCreatedFromXML以查看它是否存在,如果它存在,那么它会做一些其他的东西我需要它做。
答案 0 :(得分:2)
即使是在你的课程中创建了你的File
对象也是可能的,并且你没有任何方法可以注入它或引用它。
几周前我遇到了这个问题,PowerMock
可以帮助你。
您必须注释您的测试类才能与PowerMockRunner
一起运行。请参阅以下示例:
@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClassThatWillBeTested.class)
public class MyUnitTest{
private File mockedFile = mock(File.class);
@Before
public void setUp() throws Exception {
PowerMockito.whenNew(File.class).withAnyArguments().thenReturn(mockedFile);
}
}
@Test
public void myTestMethod(){
//test your method here...
}
如果您只创建一个文件对象,这应该适合您。 此外,您现在可以操纵模拟对象以返回您想要的内容。
when(mockedFile.exists()).thenReturn(true);