2016-06-15 73 views
-1

我应该怎么做或者我应该如何声明MyClass的这个断言是真的大厦C#类

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

这是你实际需要测试的东西吗? – Sean

+0

你想在这里测试什么? –

+0

只需重写'MyClass'中的'ToString'?这里真正的问题是什么?你尝试过什么吗?它有用吗? –

回答

2

你将不得不重写你的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"; 
    } 
} 
+0

测试通过使用覆盖,是否有任何其他方式比覆盖 – ngoni

+0

@ngoni我添加了一个替代方案。 – Wazner

1

在这个测试中,你是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"; 
    } 
} 

希望它有帮助!