我喜欢保持我的单元测试非常简单和容易遵循。我经常对测试的预期结果进行硬编码,以避免重复测试代码。此外,我经常使用数据驱动测试。例如,如果我正在测试日期/时间的表示格式,我有时会硬编码预期的字符串,即。"1/1/2000“或"1:00 PM”。但是,由于日期和时间格式是特定于文化的,而我们的应用程序是可本地化的,因此实际输出可能会有所不同。然而,我的团队在美国,所以这通常不是问题。我们的持续集成和构建服务器也与美国文化信息一起运行。
有一个团队成员抱怨说,他在自己的开发机器上更改了日期格式,以手动测试其他日期格式,因此他的许多测试都失败了。在单元测试中测试输出时,我是否应该使用当前区域性信息,或者这种硬编码是否可接受?
更新:我最终为某些测试设置了特定的语言环境。
发布于 2012-02-07 11:22:49
无论运行在什么环境中,单元测试都应该是100%可重复的。单元测试开始失败的唯一原因是代码更改并破坏了测试。
所以,是的,您需要采取措施来确保您的测试继续通过,而不考虑外部因素。
发布于 2012-02-07 11:26:35
当然,可以对结果进行硬编码,但您需要为区域设置信息提供test-double,以确保单元测试与环境隔离。
您甚至可以添加一个新的单元测试,其中包含模拟其他开发人员的locale设置的test-double。
您的单元测试应该在任何机器上运行并通过。
发布于 2012-02-07 11:28:29
理想情况下,您应该有一套单独的测试来确定您的本地化。就当前文化的测试而言,我的第一选择是将您的特定区域设置强制到测试执行环境中,而不是依赖于操作系统提供的默认设置。如果这是不可能的,我将按照当前区域设置参数化我的单元测试,就像您在主系统中处理本地化的方式一样,并从可本地化的存储中读取期望值。重要的一点是,切换主机上的设置不应该足以关闭您的单元测试套件。
https://stackoverflow.com/questions/9170563
复制相似问题