我应该怎么做或者我应该如何声明MyClass的这个断言是真的大厦C#类
Assert.AreSame(typeof(MyClass).GetMethod("ToString").DeclaringType, typeof(MyClass))
我应该怎么做或者我应该如何声明MyClass的这个断言是真的大厦C#类
Assert.AreSame(typeof(MyClass).GetMethod("ToString").DeclaringType, typeof(MyClass))
你将不得不重写你的MyClass的声明ToString方法。
class MyClass
{
public override string ToString()
{
return "MyClass";
}
}
阐释:
原因重写的ToString允许通过断言是因为断言确定在其中ToString方法被声明的类型(这是默认System.Object的)。通过重写该方法,您可以在MyClass中重新声明ToString方法。
替代
而是覆盖,你可以使用new
关键字。这将重新声明一个方法而不会覆盖它。不同之处在于,当一个实例MyClass
被转换为object
时,调用ToString
就不会调用您的用new
关键字修饰的方法,但会在使用关键字override
进行修饰时调用。
class MyClass
{
public new string ToString()
{
return "MyClass";
}
}
在这个测试中,你是triyng来获取ToString()的DeclaringType。但是您的类没有声明“ToString”,因此DeclaringType将始终返回“object”(基类声明了ToString())
避免这种情况的一种方法是使用ReflectedType属性而不是DeclaringType。
Assert.AreSame(typeof(MyClass).GetMethod("ToString").ReflectedType,typeof(MyClass);
如果你声明“MyClass的”这样一来,覆盖toString()方法,并使用原测试,使用DeclaringType属性,你会得到相同的结果!
class MyClass
{
public override string ToString()
{
return "Foo";
}
}
希望它有帮助!
这是你实际需要测试的东西吗? – Sean
你想在这里测试什么? –
只需重写'MyClass'中的'ToString'?这里真正的问题是什么?你尝试过什么吗?它有用吗? –