1

我正在尝试模拟 FileInputStream 的构造函数,并且我有以下代码:

@RunWith(PowerMockRunner.class)
@PrepareForTest(FileInputStream.class)
public class DBUtilsTest {

    @Test(expected = FileNotFoundException.class)
    public void readTableMetadataFileNotFoundException() throws Exception {
        try {
            PowerMockito.whenNew(FileInputStream.class)
                    .withParameterTypes(String.class)
                    .withArguments(Matchers.any(String.class))
                    .thenThrow(FileNotFoundException.class);

            PowerMock.replayAll();

            TableMetadata tableMeta = DBUtils
                    .readTableMetadata(path);
        } finally {
            PowerMock.verifyAll();
        }
    }
}
public class DBUtils {
    public static TableMetadata readTableMetadata(String metadataPath)
            throws FileNotFoundException, IOException {

        Properties properties = new Properties();
        FileInputStream is = new FileInputStream(metadataPath); 
        properties.load(is);
        .....
    }
}

虽然,测试失败了java.lang.AssertionError: Expected exception: java.io.FileNotFoundException

似乎构造函数并没有真正被模拟,并且没有抛出异常。任何人都可以为这个问题提供任何帮助吗?

4

1 回答 1

5

我发现我应该准备测试被测试的类,即 DBUtils,而不是 FileInputStream 类。

@PrepareForTest(DBUtils.class)

一些有用的例子可以在这里找到。

于 2013-05-18T17:26:39.707 回答