我想知道是否有人可以为所有可能的类型(或指定的子类型)伪造泛型方法调用?
例如,假设我们有这个精彩的 IBar 界面。
public interface IBar
{
int Foo<T>();
}
我可以伪造一个依赖于这个IBar的 Foo 调用,而不必指定T是任何特定类型吗?
[TestFixture]
public class BarTests
{
[Test]
public void BarFooDoesStuff()
{
var expected = 9999999;
var fakeBar = A.Fake<IBar>();
A.CallTo(() => fakeBar.Foo<T>()).Returns(expected);
var response = fakeBar.Foo<bool>();
Assert.AreEqual(expected, response);
}
}
谢谢!
答案 0 :(得分:16)
我不知道有任何办法直接这样做。我不认为DynamicProxy(FakeItEasy使用)支持开放泛型类型。 然而,如果您有兴趣,可以采取解决方法。
有specify a call to any method or property on a fake的方法。查看此通过测试中的Where
和WithReturnType
位:
[TestFixture]
public class BarTests
{
[Test]
public void BarFooDoesStuff()
{
var expected = 9999999;
var fakeBar = A.Fake<IBar>();
A.CallTo(fakeBar)
.Where(call => call.Method.Name == "Foo")
.WithReturnType<int>()
.Returns(expected);
var response = fakeBar.Foo<bool>();
Assert.AreEqual(expected, response);
}
}
尽管如此,我仍然很好奇这个用途。你有一个实际使用伪造接口作为依赖的示例测试吗?