public interface IResult
{
bool Success { get; }
}
public interface IResult<T> : IResult
{
}
使用AutoFixure和AutoMoq无论Success
是什么类型,我都试图找到一种方法true
始终T
。使用IResult
注册假名很容易,但这似乎不适用于IResult<T>
答案 0 :(得分: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<>
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();
}
}
。
测试模拟按预期工作的完整示例。
{{1}}