我是使用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文件,该文件的内容如下所示:
变量投影 ID = 8;
VAR播放器宽度= 300;
VAR球员身高= 250;
变量 player_version = 1;
.....
我已经使用 mockito 编写了testMethod()
来测试这一点,但是我能够使用测试方法成功编写.js文件,但是我如何验证其内容?
谁能帮我解决这个问题?
正如@ŁukaszBachman提到的,你可以从js文件中读取内容。 使用此方法时需要考虑以下几点:
- 测试会很慢,因为您必须等待 js 内容写入磁盘,从磁盘读回内容并断言内容。
- 从理论上讲,该测试可能是片状的,因为当代码从文件中读取时,整个js内容可能不会写入磁盘。(关于这一点,你可能应该考虑在 OutputStreamWriter 上调用 flush() 和 close(),如果你还没有的话。
另一种方法是模拟您的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
如果您将此*.js
文件保留在文件系统上,则只需创建util方法即可读取其内容,然后使用某种assertEquals
将其与您的固定数据进行比较。
这是将文件内容读入String
的代码。