Assert.AreEqual - 空与空字符串

时间:2014-07-30 15:47:12

标签: c# nunit

采用以下示例:

string x = null;
var y = String.Empty;
Assert.AreEqual(x, y);             // test fails!
Assert.AreEqual(x ?? "", y ?? ""); // passes, but ugly!

我理解null和空字符串不一样,但对于我的特定应用程序,它们基本相同。我的问题是 - 是否有任何快捷方式将以同样的方式处理null和空字符串?否则我面临着全部使用空合并运算符(有点难看!)

背景

关于这个问题来自何处的背景,我正在为项目编写集成测试。基本上我将值保存到数据库,然后再次加载它们并检查两者是否匹配。保存时,某些值是空字符串,但是当通过EF加载时,它们将作为空值返回。这导致我的一些集成测试失败。

编辑/注意 - 我用于测试的值是随机的。这意味着有时值将为空,但有时它们将被填充。记住,我必须在每个单独的字符串比较中使用空合并(因此这是一个缩写方式的问题)。

1 个答案:

答案 0 :(得分:3)

德鲁:亚历克斯正在走上正轨,尽管他没有完全发掘出来。例如:

    static void Main(string[] args)
    {
        Console.WriteLine(AreSame("", ""));
        Console.WriteLine(AreSame("", null));
        Console.WriteLine(AreSame(null, ""));
        Console.WriteLine(AreSame(null, null));

        Console.Read();
    }

    private static bool AreSame(string x, string y)
    {
        return (string.IsNullOrEmpty(x) == string.IsNullOrEmpty(y));
    }

在您的情况下,您可以使用

Assert.AreEqual(string.IsNullOrEmpty(x), string.IsNullOrEmpty(y));

或者

Assert.IsTrue(AreSame(x, y));

丑?当然,但你至少可以抽出丑陋的一点。 <丑陋

Assert.AreEqual(x ?? "", y ?? ""); // passes, but ugly!

???不确定。取决于你如何看待它。