【发布时间】:2014-03-18 23:03:42
【问题描述】:
我有以下界面可以模拟出来:
internal interface IRenderer
{
void Render<T>(StringWriter stringWriter, T item) where T : struct;
void Render(StringWriter stringWriter, decimal item);
void Render(StringWriter stringWriter, string item);
}
还有一个测试如下:
[Test]
[TestCase("dummy-string", "dummy-string")]
[TestCase(123, "123")]
[TestCase(123.456, "123.456")]
[TestCase(true, "True")]
[TestCase('C', "C")]
public void RendersExpectedValues(dynamic item, string rendered)
{
// Do some stuff
using (var stringWriter = new StringWriter(renderedBuilder)
{
_mockRenderer.Setup(x => x.Render(textWriter, item));
_renderer.Render(textWriter, item);
}
Assert.It.Worked();
}
如您所见,item 是dynamic,过载是在运行时确定的...我玩过
Type type = item.GetType();
_mockRenderer.Setup(x => x.Render<type>(textWriter, item));
和
Type type = item.GetType();
_mockRenderer.Setup(x => x.Render<typeof(type)>(textWriter, item));
两者都不起作用(当然)。
这可能吗?我可以将字符串测试用例删除到单独的测试中。
【问题讨论】: