我應該怎麼做或者我應該如何聲明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'?這裏真正的問題是什麼?你嘗試過什麼嗎?它有用嗎? –