【发布时间】:2016-12-15 15:12:34
【问题描述】:
我正在尝试使用以下代码在我的存储库中模拟 AnyAsync 方法,但存储库始终返回 false。
AnyAsync的签名是:
Task<bool> AnyAsync<TEntity>(Expression<Func<TEntiry, bool>> predicate)
我尝试了以下设置:
1:
mockCustomerRepository.Setup(r => r.AnyAsync(c => c.Email == "some@one.com"))
.ReturnsAsync(true);
2:
Expression<Func<CustomerEntity, bool>> predicate = expr =>
expr.CustomerPerson.Email == "some@one.com";
mockCustomerRepository.Setup(r => r.AnyAsync(It.Is<Expression<Func<CustomerEntity, bool>>>
(criteria => criteria == predicate))).ReturnsAsync(true);
3:
mockCustomerRepository.Setup(r => r.AnyAsync(It.IsAny<Expression<Func<CustomerEntity, bool>>>()))
.ReturnsAsync(true);
我的测试:
public class Test
{
Mock<ICustomerRepository> mockCustomerRepository;
public Test()
{
mockCustomerRepository = new Mock<ICustomerRepository>();
}
[Fact]
public async Task CustomerTest()
{
var customer = ObjectFactory.CreateCustomer(email: "some@one.com");
var sut = new CustomerService(mockCustomerRepository.Object);
var result = await sut.ValidateCustomerAsync(customer);
.
.
.
}
}
我的CustomerService.ValidateCustomerAsync 方法:
public async Task<OperationResult> ValidateCustomerAsync(CustomerEntity customer)
{
var errors = new List<ValidationResult>();
if (await _repository.AnyAsync(c => c.Email == customer.Email))
errors.Add(new ValidationResult("blah blah")));
我也读过this,但也没有用。
【问题讨论】:
-
你也可以显示
repository.AnyAsync方法签名吗? -
'publis async Task
AnyAsync (Expression > predicate) { return await _context.AnyAsync(predicate); } -
这个方法是否来自它实现的接口?很抱歉怀疑这一点,但它应该可以正常工作,所以我只能询问该方法是否来自您模拟的接口?
-
是的,它来自接口。
-
能否包含实例化模拟的代码?
标签: c# linq unit-testing mocking moq