如何测试日期格式化功能?

时间:2014-07-23 15:26:19

标签: .net unit-testing localization

我有一个格式化日期的函数,以及该函数的单元测试。

它使用new CultureInfo("en-US", useUserOverride: false).DateTimeFormat.MonthDayPattern格式化日期字符串。

var dt = new DateTime(DateTime.UtcNow.Year, 1, 1, 12, 30, 0, DateTimeKind.Utc);
var actual = The_Function_Under_Test(dt);
var expected = "January 01";

最近,"en-US"文化数据的更改导致此测试失败:

Assert.AreEqual(expected, actual); //Expected: <January 01>, Actual: <January 1>

可靠地测试此函数的输出有什么好方法,而不必在每次CultureInfo更改时都更新它?

1 个答案:

答案 0 :(得分:0)

在我看来,你的问题与你想要做的事情相矛盾。您有一个功能可以验证特定文化是否以特定方式格式化。如果该文化格式发生变化,根据定义,您的测试应该失败。

这当然引出了一个问题,为什么要对你不拥有的非关键代码进行单元测试。如果你的代码依赖于脆弱的第三方程序集,那么它本身并没有什么问题,但是这个输出只是用来将数据转储到屏幕上,不是吗?

如果你已经在你的功能中对en-US进行了硬编码,那么你也可以忽略这种文化并输出你自己的硬编码格式,这种格式永远不会改变。如果你正在使你的应用程序国际化,并支持多种文化,那么我将把测试留下来,因为实现测试的正确方法是调用文化并转储格式化的日期,这实际上是你的帮助函数所做的。