public interface IResult
{
    bool Success { get; }
}

public interface IResult<T> : IResult
{

}

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

最佳答案

使用假实现

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

以及添加 TypeRelay 自定义
 fixture.Customizations.Add(new TypeRelay(typeof(IResult<>), typeof(FakeResult<>)));

无论 IResult<> 的类型是什么,对 FakeResult<> 的所有调用都将使用具有 Successtrue 来返回 T

测试模拟是否按预期工作的完整示例。
[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();
    }
}

关于c# - Autofixture.Automoq - 泛型使 bool 始终为真,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49879885/

10-12 06:49