我们需要存储将使用匿名类型作为类型参数调用的泛型方法。试想一下: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