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

时间:2018-08-08 11:55:44

标签: java junit4 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的{​​{1}}对象创建?

2 个答案:

答案 0 :(得分:2)

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

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

您将需要PowerMock(ito)或JMockit以便能够控制new()的结果。

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

答案 1 :(得分:0)

这里的真正问题是:“您要测试什么?”。

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

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

但是,根据您的工作,有意义的重构将轻松解决问题。因此,如果您提供一个更完整的示例,我们将能够提供更多建议。