我喜欢让我的单元测试非常简单易懂。我经常对测试的预期结果进行硬编码,以避免重复我正在测试的代码。另外,我经常使用数据驱动的测试。例如,如果我正在测试日期/时间的格式,我有时会硬编码预期的字符串,即。 “1/1/2000”或“1:00 PM”。但是,由于日期和时间格式是特定于文化的,我们的应用程序是可本地化的,因此实际输出可能会有所不同。但是,我的团队位于美国,所以这通常不是问题。我们的持续集成和构建服务器也与美国文化信息一起运行。
有一个团队成员抱怨,因为他已经更改了他的开发机器上的日期格式,以手动测试其他日期格式,因此很多测试都失败了。在单元测试中测试输出时,我应该使用当前的文化信息,还是可以接受这种硬编码?
更新:我最终为某些测试设置了特定的语言环境。
答案 0 :(得分:6)
单元测试应该是100%可重复的,无论它们运行的环境如何。单元测试开始失败的唯一原因是代码改变并破坏了测试。
所以是的,您需要采取措施确保您的测试继续通过而不考虑外部因素。
答案 1 :(得分:3)
当然,对结果进行硬编码是可以的,但是您需要为区域设置信息提供测试双重,以确保单元测试与环境隔离。
你甚至可以使用test-double添加一个新的单元测试来模拟其他开发人员的语言环境设置。
您的单元测试应该运行并传递给任何机器。
答案 2 :(得分:3)
理想情况下,您应该有一套单独的测试来确定您的本地化。对于当前文化的测试,我的第一选择是强制您的特定区域设置到测试执行环境,而不是依赖于操作系统提供的默认值。如果这是不可能的,我将按当前区域设置参数化我的单元测试,其方式类似于您在主系统中处理本地化的方式,并从该可本地化存储中读取预期值。重要的是,切换主机上的设置不足以降低单元测试套件。