我有一个关于测试字符串处理方法的问题。每次,我都会在一个以字符串作为参数的方法上编写一个新测试。
现在,出现了一些问题:
那么......你有什么方法可以解决这个问题?
答案 0 :(得分:2)
\n
,\r\n
,\r\n\r
)的字符串答案 1 :(得分:2)
嗯...只需按照你想要的方式输入它?你可以使用\ n,\ r和\ t,umlauts stc。 in Java String literals;如果您担心源代码文件的编码,可以使用Unicode escape sequences,并且可以使用JDK附带的native2ascii工具生成它们。如何使用\ n,\ r,\ t,\ t *,umlauts等包含测试字符串?
如何设置编码?
一旦你有了一个Java字符串,就不用担心编码了 - 它们使用UTF-16,并且在字符串和字节数组之间进行转换时会出现任何编码问题(与C不同,Java使这些概念明显分开)
修改强>
如果您的字符串太大而无法在源代码中使用,或者您真的担心换行符和空格的处理,那么将每个字符串保存在单独的文件中可能是最好的;在这种情况下,必须在读取文件时指定编码(在InputStreamReader
)
答案 2 :(得分:2)
对于LARGE字符串,我会使用文件。性能足够快,足以进行单元测试。对于那个小小的权衡,你:
答案 3 :(得分:1)
您可以使用脚本语言对测试进行编码。
JRuby和Groovy支持HERE文档,可以更轻松地定义跨越多行的大字符串
# 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."""
这也将使您的测试代码更容易编写,因为这两种语言都有很多快捷方式可以帮助编写更简单的代码(但有些人可能会说这些代码不那么健壮,如果它只是单元测试代码那么无关紧要。) / p>
答案 4 :(得分:0)
如果您反复使用难以在文字字符串中表达的字符(例如"
,\
,不在[ -~]
中的字符),那么您可能需要考虑快速在使用之前对字符串进行查找和替换。例如,如果你使用\很多,那么你可能会有一个交换\和/的函数。您可以使用多字符序列来表示重音字符。
然而,最终找到与问题不成比例的解决方案存在明显的危险。有时\u####
更容易。
如果您要使用非Java文件,我建议将它们作为资源(Class.getResourceAsStream
/ getResource
)而不是作为松散文件打开。