使用断言测试条件构建c#类

时间:2016-06-15 11:14:27

标签: c#

我应该做什么或如何宣布MyClass使此断言为真

Assert.AreSame(typeof(MyClass).GetMethod("ToString").DeclaringType, typeof(MyClass))

2 个答案:

答案 0 :(得分:2)

您必须覆盖MyClass声明中的ToString方法。

class MyClass
{
    public override string ToString()
    {
        return "MyClass";
    }
}

解释:

重写ToString的原因允许断言传递是因为断言确定了声明ToString方法的Type(默认情况下是System.Object)。通过重写该方法,您可以在MyClass中重新声明ToString方法。

<强>替代

您可以使用new关键字代替覆盖。这将重新声明一个方法而不会覆盖它。不一样的是,当实例MyClass投放到object调用ToString时,它不会调用使用new关键字修饰的方法,但是当它被装饰时override关键字。

class MyClass
{
    public new string ToString()
    {
        return "MyClass";
    }
}

答案 1 :(得分:1)

在此测试中,您需要获得ToString()的DeclaringType。但是你的班级没有声明&#34; ToString&#34;所以DeclaringType将始终返回&#34; object&#34; (基类声明ToString())

避免这种情况的一种方法是使用ReflectedType属性而不是DeclaringType。

Assert.AreSame(typeof(MyClass).GetMethod("ToString").ReflectedType,typeof(MyClass);

如果您宣布&#34; MyClass&#34;您将获得相同的结果这样,重写ToString(),并使用DeclaringType属性!

使用原始测试
class MyClass
{
    public override string ToString()
    {
       return "Foo";
    }
}

希望它有所帮助!