4
public interface IResult
{
    bool Success { get; } 
}

public interface IResult<T> : IResult
{

}

使用 AutoFixure 和 AutoMoq 我试图找到一种方法来制作Successalways true,无论是什么类型T。使用 注册假货很容易IResult,但这似乎并不适用IResult<T>

4

1 回答 1

5

使用假实现

public class FakeResult<T> : IResult<T> {
    public bool Success {
        get { return true; }
    }
}

以及添加TypeRelay自定义

 fixture.Customizations.Add(new TypeRelay(typeof(IResult<>), typeof(FakeResult<>)));

无论 的类型是什么,所有的调用IResult<>都将使用FakeResult<>which has itsSuccess返回。trueT

测试模拟是否按预期工作的完整示例。

[TestClass]
public class AutoFixtureDefaultGeneric {
    [TestMethod]
    public void AutoFixture_Should_Create_Generic_With_Default() {
        // Arrange
        Fixture fixture = new Fixture();
        fixture.Customizations.Add(new TypeRelay(typeof(IResult<>), typeof(FakeResult<>)));

        //Act
        var result = fixture.Create<IResult<string>>();

        //Assert
        result.Success.Should().BeTrue();
    }
}
于 2018-04-17T14:52:27.263 回答