我有一个关于字符串测试方法的问题。每次,我都会在一个以字符串为参数的方法上编写一个新测试。
现在,出现了一些问题:
- 如何包含带有\n、\r、\t、变音符号等的测试字符串?
- 如何设置编码?
- 我应该使用由 FileInputStream 打开的外部文件吗?(太多的开销,恕我直言)
那么......你有什么方法来解决这个问题?
我有一个关于字符串测试方法的问题。每次,我都会在一个以字符串为参数的方法上编写一个新测试。
现在,出现了一些问题:
那么......你有什么方法来解决这个问题?
\n
, \r\n
, ) 的字符串\r\n\r
如何包含带有\n、\r、\t、变音符号等的测试字符串?
嗯……按你想要的方式输入?您可以使用 \n、\r 和 \t、变音符号 stc。在 Java 字符串文字中;如果你担心源代码文件的编码,你可以使用Unicode 转义序列,你可以使用 JDK 自带的 native2ascii 工具生成它们。
如何设置编码?
一旦有了 Java 字符串,再担心编码为时已晚——它们使用 UTF-16,并且在字符串和字节数组之间进行转换时会出现任何编码问题(与 C 不同,Java 将这些概念清楚地分开)
编辑:
如果您的字符串太大而无法在源代码中舒适地使用,或者您真的担心换行符和空格的处理,那么将每个字符串保存在单独的文件中可能是最好的;在这种情况下,必须在读取文件时指定编码(在的构造函数中InputStreamReader
)
对于大字符串,我会使用文件。对于单元测试,性能足够快。为了这个小小的权衡,你:
您可以使用脚本语言来编写测试代码。
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."""
这也将使您的测试代码更容易编写,因为两种语言都有许多有助于编写更简单代码的快捷方式(但有些人可能会说不太健壮,如果它只是单元测试代码,这并不重要)。
如果您反复使用难以在字面字符串中表达的字符(例如,、、"
不在\
中的字符[ -~]
),那么您可能需要考虑在使用之前对字符串进行快速查找和替换。例如,如果您经常使用 \,那么您可能会编写一个函数来交换 \ 和 /。您可以使用多字符序列来表示重音字符。
然而,最终得到一个与问题不成比例的解决方案显然是危险的。有时\u####
只是更容易。
如果您要查找非 Java 文件,我建议将它们作为资源 ( Class.getResourceAsStream
/ getResource
) 而不是松散文件打开。