如何使用Java中的Mockito验证字符串内容

时间:2012-06-10 18:11:26

标签: java mockito

我是使用Mockito测试框架的新手。我需要单元测试一个返回字符串内容的方法。同样的内容也将存储在一个.js文件中(即“8.js”)。 如何验证从方法返回的字符串内容是否符合我的预期。

请找到以下用于生成.js文件的代码:

public String generateJavaScriptContents(Project project)
   {

      try
      {
         // Creating projectId.js file
         FileUtils.mkdir(outputDir);
         fileOutputStream = new FileOutputStream(outputDir + project.getId() + ".js");
         streamWriter = new OutputStreamWriter(fileOutputStream, "UTF-8");
         StringTemplateGroup templateGroup =
            new StringTemplateGroup("viTemplates", "/var/vi-xml/template/", DefaultTemplateLexer.class);
         stringTemplate = templateGroup.getInstanceOf("StandardJSTemplate");
         stringTemplate.setAttribute("projectIdVal", project.getId());
         stringTemplate.setAttribute("widthVal", project.getDimension().getWidth());
         stringTemplate.setAttribute("heightVal", project.getDimension().getHeight());
         stringTemplate.setAttribute("playerVersionVal", project.getPlayerType().getId());
         stringTemplate.setAttribute("finalTagPath", finalPathBuilder.toString());
         streamWriter.append(stringTemplate.toString());
         return stringTemplate.toString();
      }
      catch (Exception e)
      {
         logger.error("Exception occurred while generating Standard Tag Type Content", e);
         return "";
      }

   }

上述方法的输出写入.js文件,该文件的内容如下所示:

  

var projectid = 8;
var playerwidth = 300;
var playerheight =   250;
var player_version = 1;
......

我使用mockito编写了testMethod()来测试它,但是我能够使用测试方法成功编写.js文件,但是如何验证其内容?

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

正如@ŁukaszBachman所提到的,你可以从js文件中读取内容。使用这种方法时需要考虑几件事情:

  1. 测试速度很慢,因为您必须等待将js内容写入磁盘,从磁盘读回内容并断言内容。
  2. 理论上,测试可能是片状的,因为在代码从文件中读取时,整个js内容可能无法写入磁盘。 (在这方面,你可能应该考虑在OutputStreamWriter上调用flush()和close(),如果你还没有。)
  3. 另一种方法是模拟你的OutputStreamWriter并将其注入方法中。这将允许您编写类似于以下内容的测试代码:

    OutputStreamWriter mockStreamWriter = mock(OutputStreamWriter.class);
    generateJavaScriptContents(mockStreamWriter, project);
    verify(mockStreamWriter).append("var projectid = 8;\nvar playerwidth = 300;...");
    

    http://mockito.googlecode.com/svn/branches/1.5/javadoc/org/mockito/Mockito.html#verify%28T%29

答案 1 :(得分:0)

如果您将此*.js文件保留在文件系统上,则只需创建一个util方法,该方法将读取其内容,然后使用某种assertEquals将其与您的固定数据进行比较。

Here是将文件内容读入String的代码。