使用FakeItEasy的假通用方法,无需指定类型

时间:2014-04-04 14:40:25

标签: c# generics fakeiteasy

我想知道是否有人可以为所有可能的类型(或指定的子类型)伪造泛型方法调用?

例如,假设我们有这个精彩的 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);
    }
}

谢谢!

1 个答案:

答案 0 :(得分:16)

我不知道有任何办法直接这样做。我不认为DynamicProxy(FakeItEasy使用)支持开放泛型类型。 然而,如果您有兴趣,可以采取解决方法。

specify a call to any method or property on a fake的方法。查看此通过测试中的WhereWithReturnType位:

[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);
    }
}

尽管如此,我仍然很好奇这个用途。你有一个实际使用伪造接口作为依赖的示例测试吗?