C# Assert.AreEqual-空与空字符串

C# Assert.AreEqual-空与空字符串,c#,nunit,C#,Nunit,以以下为例: string x = null; var y = String.Empty; Assert.AreEqual(x, y); // test fails! Assert.AreEqual(x ?? "", y ?? ""); // passes, but ugly! 我知道空字符串和空字符串不一样,但对于我的特定应用程序,它们基本上是相同的。我的问题是-是否有任何快捷方式会以相同的方式处理空字符串和空字符串?否则,我将面临全面使用空合并运算符(有点难看!)

以以下为例:

string x = null;
var y = String.Empty;
Assert.AreEqual(x, y);             // test fails!
Assert.AreEqual(x ?? "", y ?? ""); // passes, but ugly!
我知道空字符串和空字符串不一样,但对于我的特定应用程序,它们基本上是相同的。我的问题是-是否有任何快捷方式会以相同的方式处理空字符串和空字符串?否则,我将面临全面使用空合并运算符(有点难看!)

背景

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


编辑/注意-我用于测试的值是随机的。这意味着有时该值将为空,但其他时候它们将被填充。考虑到这一点,我将不得不在每个字符串比较中使用空合并(因此有一个简化方法的问题)。

Drew:AlexD已经走上正轨,尽管他没有完全找到它。例如:

    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.AreEqual(x ?? "", y ?? ""); // passes, but ugly!

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

@reggaeguitar如果您阅读了我不是问的关于字符串比较的问题。我在问一个nUnit电话怎么缩写。你说得对,对不起。我只想创建一个包含空合并运算符的方法,并在您的资产中调用它。我不确定nunit是否支持
IEqualityComparer
,如果是,您可以传递自定义比较器。否则,创建自定义比较器并像使用Assert.IsTrue(您的comparer.Equals(x,y))那样使用它。以x和y为参数并封装Assert的扩展方法如何?
Assert.AreEqual(x+,y+)将少两个字节:)。但x和y也可以有值。比较可能是
string.IsNullOrEmpty(x)=string.IsNullOrEmpty(y)| x==y
Assert.AreEqual(x ?? "", y ?? ""); // passes, but ugly!