我有一个类型为varchar的可为空的数据库字段。我正在为检索此字段的值的服务方法编写单元测试。如果数据库字段为Null(这是期望的行为),则service方法使用返回String.Empty值的自定义DAL。Nothing的测试字符串值等于String.Empty
在我的单元测试中,我使用Linq To SQL自动生成的类来获取实际的数据库值并根据我的服务方法值对其进行测试。如果数据库字段为Null,则L2S类将为字符串赋值Nothing。我使用Assert.Equal来比较两个值,但断言失败,因为Nothing的字符串值不等于空字符串。我希望这个断言能通过,因为它们都代表一个空数据库值!
对于大多数数据库类型,所述L2S类将暴露可为空的字段作为一个可为空的(的T)类型,所以我通常将测试简单地是这样的(VB代码)平等:
Assert.AreEqual(l2sValue.GetValueOrDefault, myValue, "Values not equivalent.")
然而可空VARCHAR处理是只是暴露为字符串,所以我不能使用GetValueOrDefault。所以我的问题是,什么是最优雅的方式来改变我的代码,以认识到一个字符串值为Nothing和String.Empty是相同的测试的目的?
是的,这是我的第一个想法,但我没有看到一个优雅的方式来使用这个没有分裂成两个测试用例使用If语句?有没有办法避免这种情况? – elwy 2010-02-24 17:07:01