模拟文件编写者的最佳方式

时间:2012-08-21 12:12:24

标签: unit-testing groovy metaprogramming

我想测试以下方法,特别是调用了write和close方法(在写入检查的情况下,写的是我所期望的)。真正的源代码是Java,我在Groovy中编写测试。我不能使用地图强制,因为没有默认的构造函数。我尝试了mockFor和metaClass,但是当我将源代码改为groovy并且我的单元测试在groovy中时,我只能得到那些工作。我有任何常规选项来测试此代码吗?下面的代码是groovy但java方法源非常相似。生成一个真实的标题,执行一些日期逻辑,然后写入结果。

class TestWriter {
    protected void writeResultToXMLFile(String response,FileWriter fw, Date today){
        String header = "header";
        try{
            fw.write(header);
            fw.close();
        } catch (IOException ioe){
            String errorMessage = "Unable to write to file";
            try{
                fw.close();
            }catch (IOException ioException){
                errorMessage += ", Error attempting to close the file";
            }
        }
    }
}

2 个答案:

答案 0 :(得分:3)

将代码类FileWriter替换为Writer接口,然后您就可以为编写器创建模拟实现并测试它是否接收到所有需要的调用

答案 1 :(得分:2)

另一种可能性是使用类似Mockito的框架来模拟FileWriter,然后verify来传递正确的值。

它看起来像这样:

// create the mock
FileWriter mock = mock(FileWriter.class);

// call the method under test and pass in the mock 

// verify the intended behaviour
verify(mock).write("the expected text");
verify(mock).close();

希望这有帮助。