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<>
的所有调用都将使用具有 Success
的 true
来返回 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/