我应该做什么或如何宣布MyClass使此断言为真
Assert.AreSame(typeof(MyClass).GetMethod("ToString").DeclaringType, typeof(MyClass))
答案 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";
}
}
希望它有所帮助!