我有一个类型为varchar的可空数据库字段。我正在为检索此字段值的服务方法编写单元测试。如果数据库字段为Null(这是所需的行为),则服务方法使用返回String.Empty值的自定义DAL。
在我的单元测试中,我使用的是Linq To SQL自动生成的类,以获取实际的数据库值并根据我的服务方法值对其进行测试。如果数据库字段为Null,则L2S类将字符串赋值为Nothing。我使用Assert.Equal来比较这两个值,但断言失败,因为Nothing的字符串值不等于空String。我想要传递这个断言,因为它们都代表一个空数据库值!
对于大多数数据库类型,L2S类将可空字段公开为Nullable(of T)类型,因此我通常会像这样测试相等(VB代码):
Assert.AreEqual(l2sValue.GetValueOrDefault, myValue, "Values not equivalent.")
然而,可空的varchars只是作为字符串公开,因此我不能对它们使用GetValueOrDefault。所以我的问题是,改变我的代码以识别Nothing和String.Empty的字符串值与此测试的目的相同的最优雅的方法是什么?
答案 0 :(得分:1)
String.IsNullOrEmpty()
答案 1 :(得分:1)
如果没有提供值,为什么数据库没有设置为空字符串,而不是NULL
?如果您的默认值为''
,请告诉数据库 - 否则将不会知道。从长远来看,这可以为您节省很多麻烦。
答案 2 :(得分:0)
与C#,VB.Net treat Nothing as equal to empty string中的字符串比较不同,所以只需使用此
Assert.IsTrue(s1 = s2, "Values are not equivalent")