模拟类

时间:2015-08-11 00:05:47

标签: java mocking

如何模拟某个类的任何对象。

我希望任何文件对象在调用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以查看它是否存在,如果它存在,那么它会做一些其他的东西我需要它做。

1 个答案:

答案 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);