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
如果您的字符串太大,无法在源代码中轻松使用,或者您真的担心换行符和空白的处理,那么将每个字符串保存在单独的文件中可能是最好的;在这种情况下,读取文件时必须指定编码(在
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测试类。