C# Visual Studio单元测试拒绝运行

C# Visual Studio单元测试拒绝运行,c#,unit-testing,visual-studio-2013,C#,Unit Testing,Visual Studio 2013,我开始使用VisualStudio和内置单元测试仪测试一个学校项目。该项目是一个用C#编写的类库。到目前为止,我所有的测试都有效。但是,我仍然有一个测试不会运行。它不是通过或失败,它只是不运行。没有给出任何错误消息,我无法让它运行或调试或执行任何操作。以下是我正在尝试的测试: [TestMethod()] public void PublicDecimalEqualityTest2() { Formula form1 = new Formula("2.323200

我开始使用VisualStudio和内置单元测试仪测试一个学校项目。该项目是一个用C#编写的类库。到目前为止,我所有的测试都有效。但是,我仍然有一个测试不会运行。它不是通过或失败,它只是不运行。没有给出任何错误消息,我无法让它运行或调试或执行任何操作。以下是我正在尝试的测试:

[TestMethod()]
    public void PublicDecimalEqualityTest2()
    {
        Formula form1 = new Formula("2.3232000+3.00");
        Formula form2 = new Formula("2.3232+3.0000");
        Assert.IsTrue(form1==form2);
    }
我的类的“==”运算符定义正确。奇怪的是,这个测试运行并通过了:

[TestMethod()]
    public void PublicDecimalEqualityTest()
    {
        Formula form1 = new Formula("2.3232000+3.00");
        Formula form2 = new Formula("2.3232+3.0000");
        Assert.IsTrue(form1.Equals(form2));
    }
知道为什么发布的第一个测试无法运行吗

编辑:以下是
=
运算符的代码:

public static bool operator ==(Formula f1, Formula f2) {
    if (f1==null && f2==null)
    { return true; }
    if (f1==null || f2==null)
    {return false;}
    if (f1.GetFormulaBasic()==f2.GetFormulaBasic())
    { return true; }
    else
    { return false;}
}

GetFormulaBasic()
只是从类中返回一个私有字符串。希望这有帮助。

我的猜测是正确的。检查null时,您正在调用实现中的操作符
==
。将
=
替换为
对象。ReferenceEquals
用于测试运算符内部是否为null。这里有一点简化:

public static bool operator ==(Formula f1, Formula f2)
{
    if (object.ReferenceEquals(f1, f2))
    { 
        return true; 
    }
    if (object.ReferenceEquals(f1, null) || object.ReferenceEquals(f2, null))
    {
        return false;
    }

    return f1.GetFormulaBasic() == f2.GetFormulaBasic();
}

我的猜测是正确的。检查null时,您正在调用实现中的操作符
==
。将
=
替换为
对象。ReferenceEquals
用于测试运算符内部是否为null。这里有一点简化:

public static bool operator ==(Formula f1, Formula f2)
{
    if (object.ReferenceEquals(f1, f2))
    { 
        return true; 
    }
    if (object.ReferenceEquals(f1, null) || object.ReferenceEquals(f2, null))
    {
        return false;
    }

    return f1.GetFormulaBasic() == f2.GetFormulaBasic();
}

你能给我们看一下==操作符吗?我猜你的代码在
=
操作符中导致了StackOverflow异常,这导致运行程序崩溃而没有结果。你试过调试(单步执行)测试方法吗?我不认为这是StackOverflow异常。我的“==”只测试空对象和两个对象之间的字符串等价性。如果有可能从中获得StackOverflow异常,您是否介意解释一下这是如何可能的?不,我的猜测完全正确
f1==null
将调用
=
操作符。您正在实现的那个。因此,堆栈溢出。使用
Object.ReferenceEquals
测试运算符内部是否存在空值。您能告诉我们==运算符吗?我猜您的代码在
==
运算符中导致StackOverflow异常,导致运行程序崩溃而没有结果。您尝试过调试(逐步调试)吗测试方法?我不认为这是StackOverflow异常。我的“==”只测试空对象和两个对象之间的字符串等价性。如果有可能从中获得StackOverflow异常,您是否介意解释一下这是如何可能的?不,我的猜测完全正确
f1==null
将调用
=
操作符。您正在实现的那个。因此,堆栈溢出。使用
Object.ReferenceEquals
测试运算符中是否存在空值。是的,这就是问题所在。谢谢你的帮助。我发呆了,没有意识到我的操作员在递归地调用自己。是的,这就是问题所在。谢谢你的帮助。我发呆了,没有意识到我的操作员在递归地调用自己。