我們需要存儲將使用匿名類型作爲類型參數調用的泛型方法。試想一下:Rhino Mocks:如何將通用方法存入匿名類型?
interface IProgressReporter
{
T Report<T>(T progressUpdater);
}
// Unit test arrange:
Func<object, object> returnArg = (x => x); // we wish to return the argument
_reporter.Stub(x => x.Report<object>(null).IgnoreArguments().Do(returnArg);
這工作,如果實際調用的測試方法。報告<牛逼>()與對象的類型參數做了,但實際上,該方法被稱爲t是一個匿名類型。這種類型在測試方法之外是不可用的。結果,存根永遠不會被調用。
是否有可能在不指定類型參數的情況下對通用方法進行存根?
有點OT但被調用者如何使用匿名類型的對象?我從來沒有見過這樣的用例。試着在這裏回顧一下通用方法的選擇.. – Gishu 2011-06-01 06:47:52
好問題;)關鍵是不要讓Report方法對參數做任何事情,只是爲了返回它。它有助於鏈接LINQ表達式。因此,我們當然可以改寫它,但認爲我們會去。 – 2011-06-03 10:55:36
表示。如果您使用相同的順序和類型的屬性創建另一個匿名類型,則它們應該具有相同的類型。也許這可以幫助你..在你的測試中創建一個類似的虛擬類型,並對它做一個GetType()來檢索類型...但就像我之前說的..看起來複雜/巧妙。簡單是首選:) – Gishu 2011-06-03 11:34:30