5

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

现在,出现了一些问题:

  • 如何包含带有\n、\r、\t、变音符号等的测试字符串?
  • 如何设置编码?
  • 我应该使用由 FileInputStream 打开的外部文件吗?(太多的开销,恕我直言)

那么......你有什么方法来解决这个问题?

4

5 回答 5

3
  • 如果您有很多,请将测试字符串与字符串常量一起保存在单独的类中
  • 除非必须,否则尽量不要将文件保存在磁盘上。我同意你的说法——这会带来太多的开销(更不用说如果你开始出现 I/O 错误会发生什么)
  • 确保为不同的操作系统测试具有不同换行符 ( \n, \r\n, ) 的字符串\r\n\r
于 2009-01-20T15:10:51.183 回答
2

如何包含带有\n、\r、\t、变音符号等的测试字符串?

嗯……按你想要的方式输入?您可以使用 \n、\r 和 \t、变音符号 stc。在 Java 字符串文字中;如果你担心源代码文件的编码,你可以使用Unicode 转义序列,你可以使用 JDK 自带的 native2ascii 工具生成它们。

如何设置编码?

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

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

于 2009-01-20T15:19:01.743 回答
2

对于大字符串,我会使用文件。对于单元测试,性能足够快。为了这个小小的权衡,你:

  1. 不必担心转义字符
  2. 可以区分源代码管理中的内容
  3. 可以独立验证文件(即xml/html)
于 2009-01-20T16:21:56.360 回答
1

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

JRubyGroovy支持 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."""

这也将使您的测试代码更容易编写,因为两种语言都有许多有助于编写更简单代码的快捷方式(但有些人可能会说不太健壮,如果它只是单元测试代码,这并不重要)。

于 2009-01-20T15:43:06.330 回答
0

如果您反复使用难以在字面字符串中表达的字符(例如,、、"不在\中的字符[ -~]),那么您可能需要考虑在使用之前对字符串进行快速查找和替换。例如,如果您经常使用 \,那么您可能会编写一个函数来交换 \ 和 /。您可以使用多字符序列来表示重音字符。

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

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

于 2009-01-20T16:01:35.060 回答