使用Java源代码中的大型文本片段

Rob*_*ska 21 java text heredoc

有没有什么好的方法可以在Java源代码中使用文本块(字符串)?许多其他语言都有heredoc语法可供他们使用,但Java没有.这使得处理诸如输出大量静态标记的标记库之类的东西以及需要断言与XML块的比较的单元测试非常不方便.

其他人如何解决这个问题?它甚至可能吗?或者我只是忍受它?

Uri*_*Uri 0

虽然您可以使用某些格式化程序将任何文本文件或长文本转换并嵌入为 Java 字符串(例如,使用换行符、必要的转义符等),但我真的无法想象您需要这些功能的常见情况。

软件的趋势通常是将代码与其所操作的数据分开。大文本部分,即使只是为了显示或比较,也是数据,因此通常存储在外部。读取文件(甚至将结果缓存在内存中)的成本相当低。国际化更容易。改变更容易。版本控制更容易。其他工具(例如拼写检查器)也可以轻松使用。

我同意,在单元测试中,您想要将事物与模拟进行比较,您将需要大规模的文本比较。然而,当您处理如此大的文件时,您通常会进行可以处理多个不同的大输入以产生多个大输出的测试,那么为什么不让您的测试加载适当的文件而不是内联它呢?

XML 也是如此。事实上,对于 XML,我认为在许多情况下,您需要读取 XML 并构建一个 DOM 树,然后对其进行比较,而不是进行可能受空格影响的文本比较。在单元测试中手动创建 XML 树是很丑陋的。

  • -1 直接在 Java 代码中读取具有 XML 或 SQL 脚本的测试装置通常更容易。当 DOM 树非常大时,来回切换额外的文件或手动构建 DOM 树是非常烦人的。您最终必须测试测试代码。 (10认同)
  • 我认为 Rob 可能会在没有利用 ORM 的 Java 应用程序中描述大型多行 SQL 字符串,或者执行大量非 ORM 支持的 SQL 操作。这些绝对是逻辑和代码的一部分,并且是在 java 中使用的 PITA。我认为我也不想将它们存储在数据库中。 (7认同)