为Junit测试包装多行字符串

Wol*_*ahl 4 java eclipse junit

为了比较JUnit测试中的多行文本结果,我经常需要从文本表示转到使用多行文本初始化字符串的Java代码.

例如,如果测试应检查包含以下内容的xml字符串:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Customer>
    <id>100</id>
    <name>John Doe</name>
    <orders>
        <Order>
            <address>100 main street, smalltown, pa</address>
            <orderid>1100</orderid>
        </Order>
        <Order>
            <address>5 broadway, ny, ny</address>
            <orderid>1200</orderid>
        </Order>
    </orders>
</Customer>
Run Code Online (Sandbox Code Playgroud)

我想使用一个工具/生成器来获取上面的输入并获得以下结果:

String expected ="";
    expected+="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n";
expected+="<Customer>\n";
expected+="    <id>100</id>\n";
expected+="    <name>John Doe</name>\n";
expected+="    <orders>\n";
expected+="        <Order>\n";
expected+="            <address>100 main street, smalltown, pa</address>\n";
expected+="            <orderid>1100</orderid>\n";
expected+="        </Order>\n";
expected+="        <Order>\n";
expected+="            <address>5 broadway, ny, ny</address>\n";
expected+="            <orderid>1200</orderid>\n";
expected+="        </Order>\n";
expected+="    </orders>\n";
expected+="</Customer>\n";
Run Code Online (Sandbox Code Playgroud)

和/或

    // Create test file
    java.io.PrintWriter srcWriter = new java.io.PrintWriter(new java.io.FileOutputStream(testFile));
    srcWriter.println("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n");
    srcWriter.println("<Customer>\n");
    srcWriter.println("    <id>100</id>\n");
    srcWriter.println("    <name>John Doe</name>\n");
    srcWriter.println("    <orders>\n");
    srcWriter.println("        <Order>\n");
    srcWriter.println("            <address>100 main street, smalltown, pa</address>\n");
    srcWriter.println("            <orderid>1100</orderid>\n");
    srcWriter.println("        </Order>\n");
    srcWriter.println("        <Order>\n");
    srcWriter.println("            <address>5 broadway, ny, ny</address>\n");
    srcWriter.println("            <orderid>1200</orderid>\n");
    srcWriter.println("        </Order>\n");
    srcWriter.println("    </orders>\n");
    srcWriter.println("</Customer>\n");
    srcWriter.close();
    // PrintWriter never throws Exceptions, one must check the error state manually
    //
    if (srcWriter.checkError())
    {
        throw new IOException( "can not write " + testFile );
    }   
Run Code Online (Sandbox Code Playgroud)

什么是开发工具/ eclipse实用程序或插件来实现这一目标?

  • 从文件中获取多行输入文本(在IDE或命令行中)
  • 逃避报价和反斜杠
  • 转换为初始化字符串文字的Java代码和/或将在java代码中创建文件,而无需额外的文件资源
  • 将结果输出到新文件和/或控制台,或直接输出到编辑器中以便在编译时使用

输出文件(如果有)不应随编译结果一起提供.在文件模式中,应该从java代码中的字符串文字重新创建输入文件的等效项.

mat*_*ake 8

假设您正在从另一个源复制多行文本,并且您正在使用Eclipse,它可以自动将您的文本转换为多行字符串文字.

在我的版本中,在粘贴到字符串文字时,在Windows - >首选项 - > Java - >编辑器 - >键入 - >转义文本下启用它

然后,如果你输入

String expected = "
Run Code Online (Sandbox Code Playgroud)

并复制一些文字

blah
blah
blah
blah
blah
Run Code Online (Sandbox Code Playgroud)

然后粘贴你的字符串,Eclipse创建:

 String expected = "blah\n" + 
 "blah\n" + 
 "blah\n" + 
 "blah\n" + 
 "blah"
Run Code Online (Sandbox Code Playgroud)

我个人认为,如果Java有一个与Perl的HERE文档等效的多行,那将会很好.