Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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 如何在单元测试中处理大型字符串?_Java_Unit Testing_Junit - Fatal编程技术网

Java 如何在单元测试中处理大型字符串?

Java 如何在单元测试中处理大型字符串?,java,unit-testing,junit,Java,Unit Testing,Junit,我有一个关于测试字符串的方法的问题。每次,我都会对一个以字符串作为参数的方法编写一个新的测试 现在,出现了一些问题: 如何使用\n、\r、\t、umlauts等包含测试字符串 如何设置编码 我应该使用FileInputStream打开的外部文件吗?(管理费用太高,imho) 所以。。。你有什么办法来解决这个问题? 如果有很多测试字符串,请使用字符串常量将测试字符串保存在单独的类中 除非必须,否则不要将文件保存在磁盘上。我同意你的说法——这会带来太多的开销(更不用说如果你开始出现I/O错误会发

我有一个关于测试字符串的方法的问题。每次,我都会对一个以字符串作为参数的方法编写一个新的测试

现在,出现了一些问题:

  • 如何使用\n、\r、\t、umlauts等包含测试字符串
  • 如何设置编码
  • 我应该使用FileInputStream打开的外部文件吗?(管理费用太高,imho)
所以。。。你有什么办法来解决这个问题?

  • 如果有很多测试字符串,请使用字符串常量将测试字符串保存在单独的类中
  • 除非必须,否则不要将文件保存在磁盘上。我同意你的说法——这会带来太多的开销(更不用说如果你开始出现I/O错误会发生什么)
  • 确保为不同的操作系统测试具有不同换行符的字符串(
    \n
    \r\n
    \r\n\r
如何使用\n、\r、\t、umlauts等包含测试字符串

嗯。。。按你想要的方式打?您可以使用\n、\r和\t、umlauts stc。在Java字符串文本中;如果您担心源代码文件的编码,可以使用,也可以使用JDK附带的native2ascii工具生成它们

如何设置编码

一旦有了Java字符串,就不用担心编码了——它们使用UTF-16,在字符串和字节数组之间进行转换时会出现任何编码问题(与C不同,Java将这些概念清晰地分开)

编辑:
如果您的字符串太大,无法在源代码中轻松使用,或者您真的担心换行符和空白的处理,那么将每个字符串保存在单独的文件中可能是最好的;在这种情况下,读取文件时必须指定编码(在
InputStreamReader的构造函数中)

您可以使用脚本语言编写测试代码

并在此处支持文档,使定义跨多行的大字符串变得更容易

# In JRuby
mystring = <<EOS
This is a long string that
spans multiple lines.
EOS

# In Groovy
def mystring = """This is a long string that
spans multiple lines."""
JRuby中的
#

mystring=如果您反复使用难以用文字字符串表示的字符(例如
\
,不在
[-~]
中的字符)然后,您可能需要考虑在使用它之前对字符串进行快速查找和替换。例如,如果使用\AUT,则可以使用函数来交换\和/或。您可以使用多字符序列来表示重音字符。

然而,以一个与问题不成比例的解决方案告终显然是有危险的。有时
\u###
更容易


如果您选择的是非Java文件,我建议将它们作为资源(
Class.getResourceAsStream
/
getResource
)打开,而不是作为松散文件打开。

对于大字符串,我会使用文件。对于单元测试,性能非常快。对于这个小的权衡,您:

  • 不必担心转义字符
  • 可以在源代码管理中区分内容
  • 可以独立验证文档(即xml/html)

  • 所以你建议在单元测试中使用字符串文字?即使它们是looong(例如200行?)这是一个方便的问题。如果你认为它们足够长,可以放在一个外部文件中,并开始在测试中处理I/O,那么就这样做。否则,是的,将它们放在测试中,但要很好地组织它们。我不明白你的想法。为什么我要为java类编写测试脚本?不是脚本,而是用Groovy/JRuby编写实际的测试。不确定但是您在Groovy中具有java互操作性,因此可以使用Groovy测试类。