使用 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
.
但是,根据您的操作,有意义的重构将轻松解决问题。所以如果你给我们一个更完整的例子,我们将能够给出更多的建议。
我的代码使用 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
.
但是,根据您的操作,有意义的重构将轻松解决问题。所以如果你给我们一个更完整的例子,我们将能够给出更多的建议。