在提供国际化支持时,自动化单元测试中的字符串是否仍应硬编码?

Should strings in automated unit tests still be hard-coded when providing internationalization support?

在编写支持国际化的 (C++) 程序时,我知道字符串通常应该存储在外部翻译数据库中,而不是硬编码。但是,我想知道对单元测试代码中使用的字符串进行硬编码是否仍然是常见的做法。

我的直觉是,单元测试中的硬编码字符串是可以的,因为最终用户会浪费翻译测试代码的努力。但是,也许在某些情况下它会很有用,例如本地化测试/开发?

我想知道常见的做法是什么。谢谢。

您不必担心注定只能由开发团队读取的输出消息(日志)的语言环境。

通常您会尝试使用一个测试工具将您的 UT 结果与基线进行比较。该工具不关心 UT 日志中使用的语言。 :)
现在当然,由于错误或有意更改,与基线的比较有时会失败。
所以你必须问自己的唯一问题是:发生这种情况时,谁来检查 UT 日志?如果是开发团队,并且所有开发团队都说英语,请在您的 UT 日志中使用英语。

至于非日志字符串(例如,在您的测试中硬编码或从文件中读取的货币金额),嗯,
由于经常求助于模拟对象以专注于单元测试的主要 objective(而不是让它因其他事情而出轨),
如果 UT 的真实 objective 是完全不同的东西,请毫不犹豫地模拟本地化过程(例如,将语言环境固定为 US/English)。

最后,对于专门设计用于测试本地化的单元测试(例如,确保正确解释用户输入,在显示中使用正确的语言等),情况正好相反:担心国际化,并尝试模拟任何其他阻碍。