Assert语句中有一个错误:Expected invocation on the mock once, but was 0 times和assert.equal返回false。
参数的顺序为真,模拟被冻结。帮我找出哪里出了问题?下面是我的xUnit代码和testedModule:
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不同。
发布于 2022-10-05 13:39:56
发布的代码不编译。Id是字符串还是int?此版本确实编译和传递:
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;
})
{
}
}https://stackoverflow.com/questions/73079722
复制相似问题