Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中使用Mockito验证字符串内容_Java_Mockito - Fatal编程技术网

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

如何在Java中使用Mockito验证字符串内容,java,mockito,Java,Mockito,我不熟悉使用Mockito测试框架。我需要对一个返回字符串内容的方法进行单元测试。同样的内容也将存储在一个.js文件中(即“8.js”)。 如何验证方法返回的字符串内容是否符合预期 请查找以下生成.js文件的代码: public String generateJavaScriptContents(Project project) { try { // Creating projectId.js file FileUtils.mk

我不熟悉使用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-projectd=8
var playerwidth=300<玩八= 250;
var player\u version=1

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


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

如果您将这个
*.js
文件持久保存在文件系统上,那么只需创建一个util方法来读取它的内容,然后使用某种
assertEquals
将它与您的固定数据进行比较


是将文件内容读入
字符串的代码

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


是将文件内容读入
字符串的代码

正如@ukaszBachman提到的,您可以从js文件中读取内容。当使用这种方法时,有两件事需要考虑:

  • 测试会很慢,因为您必须等待js内容写入磁盘,从磁盘读回内容并断言内容
  • 从理论上讲,该测试可能是不可靠的,因为在代码读取文件时,整个js内容可能不会写入磁盘。(在该注释中,您可能应该考虑在OuttoFraseWrror上调用FrHuffE)和Couter(),如果您还没有的话)
  • 另一种方法是模拟您的
    OutputStreamWriter
    ,并将其注入方法中。这将允许您编写类似以下内容的测试代码:

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

    正如@ukaszBachman提到的,您可以从js文件中读取内容。当使用这种方法时,有两件事需要考虑:

  • 测试会很慢,因为您必须等待js内容写入磁盘,从磁盘读回内容并断言内容
  • 从理论上讲,该测试可能是不可靠的,因为在代码读取文件时,整个js内容可能不会写入磁盘。(在该注释中,您可能应该考虑在OuttoFraseWrror上调用FrHuffE)和Couter(),如果您还没有的话)
  • 另一种方法是模拟您的
    OutputStreamWriter
    ,并将其注入方法中。这将允许您编写类似以下内容的测试代码:

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

    如果要注入OutputStreamWriter,还可以创建一个新的ByteArrayOutputStream,而不是模拟一个。然后,您可以通过对流执行
    toString()
    并对其执行断言来检查内容。对我来说,这比验证模拟更自然,但这可能是个人偏好的问题。如果您正在注入OutputStreamWriter,您还可以创建一个新的ByteArrayOutputStream,而不是模拟。然后,您可以通过对流执行
    toString()
    并对其执行断言来检查内容。对我来说,这比验证一个模拟更自然,但这可能是个人偏好的问题。