首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用自动夹具模拟返回模型?

如何使用自动夹具模拟返回模型?
EN

Stack Overflow用户
提问于 2022-07-22 11:35:27
回答 1查看 70关注 0票数 0

Assert语句中有一个错误:Expected invocation on the mock once, but was 0 timesassert.equal返回false

参数的顺序为真,模拟被冻结。帮我找出哪里出了问题?下面是我的xUnit代码和testedModule:

代码语言:javascript
复制
public async Task<GeolocationDataResponse> GetById(int Id)
{
    var user = await _dbRepository.GetBy(x => x.Id == Id);
    if (user is null)
        return null;
    var userResponse = _mapper.Map<UserResponse>(user );
    return userResponse;
} 


public class UserProviderTests
   {
[Theory, UserProviderTestsData]
public async void GetById_ReturnSuccess(
    User user,
    [Frozen] Mock<IDbRepository<User>> dbRepoMock,
    UserProvider sut
    )
{
    int id = user.Id;
    dbRepoMock.Setup(x => x.GetBy(v => v.Id == It.IsAny<int>())).ReturnsAsync(user);

     var response = await sut.GetById(id);

     Assert.Equal(response.Id, id);
     dbRepoMock.Verify(x => x.GetBy(v => v.Id == It.IsAny<string>()), Times.Once);
}

internal class UserProviderTestsDataAttribute : AutoDataAttribute
{
    public UserProviderTestsDataAttribute()
        : base(
            () =>
            {
                var fixture = new Fixture();
                fixture.Customize(new AutoMoqCustomization() { ConfigureMembers = true });
                fixture.Customize(new UserProviderTestsCustomization ());
                return fixture;
            })
    {
    }
}

internal class UserProviderTestsCustomization : ICustomization
{
    public void Customize(IFixture fixture)
    {
        fixture.Register(() =>
            new MapperConfiguration(cfg => { cfg.AddProfile(new UserAutomapper()); }).CreateMapper());
    }
 }
}

调试后,我注意到GetBy返回的模型与在Mock.Setut().ReturnAsync(user)中定义的Id不同。

EN

回答 1

Stack Overflow用户

发布于 2022-10-05 13:39:56

发布的代码不编译。Id是字符串还是int?此版本确实编译和传递:

代码语言:javascript
复制
public class UserProviderTests
{
    [Theory]
    [AutoMoqData]
    public async void GetById_ReturnSuccess(
        User user,
        [Frozen] Mock<IDbRepository<User>> dbRepoMock,
        UserProvider sut)
    {
        int id = user.Id;
        dbRepoMock.Setup(t => t.GetById(id)).ReturnsAsync(user);

        var response = await sut.GetById(id);

        Assert.Equal(response.Id, id);
        dbRepoMock.Verify(x => x.GetById(id), Times.Once);
    }
}

public interface IDbRepository<T> where T : User
{
    Task<T> GetById(int id);
}

public class UserProvider
{
    private readonly IDbRepository<User> _repository;

    public UserProvider(IDbRepository<User> repository)
    {
        _repository = repository;
    }

    public async Task<User> GetById(int id)
    {
        return await _repository.GetById(id);
    }
}

public class User
{
    public int Id { get; set; }
}

internal class AutoMoqData : AutoDataAttribute
{
    public AutoMoqData()
        : base(
            () =>
            {
                var fixture = new Fixture();
                fixture.Customize(new AutoMoqCustomization());
                return fixture;
            })
    {
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73079722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档