我试图了解在 Xunit 中如何使用 AutoFixture 进行模拟。我创建了 Service 和 Repository 类及其接口。模拟方法应该传递与默认值不同的值。
模拟方法总是传递默认值而不是我在“.Returns()”中写的值。我试过 AutoConfiguredMoqCustomization 但它提供了完全随机的值,我无法取回。
存储库.cs
public class Repository : IRepository
{
public int GetInt()
{
return 999;
}
}
服务.cs
public class Service : IService
{
private readonly Repository _repository;
public Service()
{
_repository = new Repository();
}
public string GetStringFromInt()
{
return _repository.GetInt().ToString();
}
}
测试
[Fact]
public void Test()
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var repositoryMock = fixture.Create<Mock<IRepository>>();
var service = fixture.Create<Service>();
repositoryMock.Setup(x => x.GetInt()).Returns(1);
var act = service.GetStringFromInt();
Assert.Equal("1", act);
}
如您所见,Repository 中的默认值是 999,我期望 repositoryMock 为 1,但结果是“999”而不是“1”。
哦,我明白了我的问题。当我使用自动起订量测试服务声明参数时,必须在所有模拟存储库之后
测试
[Theory, AutoMoqData]
public void Test([Frozen] Mock<IRepository> repositoryMock, Service service)
{
...
}
属性
public class AutoMoqDataAttribute : AutoDataAttribute
{
public AutoMoqDataAttribute() : base(GetDefaultFixture)
{
}
private static IFixture GetDefaultFixture()
{
return new Fixture().Customize(new AutoMoqCustomization());
}
}