使用 EasyMock 模拟新的 PrintWriter(String fileName)

Mock new PrintWriter(String fileName) using EasyMock

我的代码使用 PrintWriter 将内容写入文件,例如

PrintWriter writer = null;
try
{
    writer = new PrintWriter( fileName + "_version", "UTF-8" );
    writer.println( "writing File" );
}
catch( FileNotFoundException e )
{
    e.printStackTrace();
}

我只想使用 EasyMock 编写 jUnit 测试。我如何在 EasyMock 中模拟 new 对象创建 PrintWriter

您无法使用 EasyMock 测试上述代码。

无法使用 EasyMock 模拟 try/catch 中对 new PrintWriter() 的调用。故事结束。

您需要 PowerMock(ito) 或 JMockit 才能控制 new().

的结果

或者(首选):您应该将难以测试的生产代码更改为更容易测试的代码,例如使用依赖注入。一种简单的方法是 向此类代码传递 FileWrite 对象。

这里真正的问题是:"What do you want to test?".

测试和模拟需要经过测试的 class 和依赖项。

这里没有可见的测试class。如果您的想法是要测试创建和使用 PrintWriter 的方法,是的,其他答案是正确的,但您不能。您需要在 EasyMock 之上使用 PowerMock 来模拟 new.

但是,根据您的操作,有意义的重构将轻松解决问题。所以如果你给我们一个更完整的例子,我们将能够给出更多的建议。