如何正确使用Record.ExceptionAsync
?await Record.ExceptionAsync(async () => await x.GetAsync())
或await Record.ExceptionAsync(() => x.GetAsync())
示例:
[Fact]
public async Task ShouldValidateDuplicateEmailOnSave()
{
var user = new User();
var predicate = () => It.IsAny<Expression<Func<User, bool>>>();
var sut = _autoMock.Create<IUserService>();
var validator = _autoMock.Mock<IUniquenessValidator<User>>();
validator
.Setup(m => m.Validate<EmailUniquenessError>(predicate.Invoke()))
.Throws(new EmailUniquenessError());
var actual = await Record.ExceptionAsync(() => sut.Save(user)); // I don't use postfix "Async"
Assert.NotNull(actual);
Assert.IsType<EmailUniquenessError>(actual);
validator.Verify(v => v.Validate<EmailUniquenessError>(predicate.Invoke()), Times.Once);
}
我不明白有什么区别,我在测试中看不到。
1条答案
按热度按时间rjee0c151#
真的没有太大的区别。async/await只是引入了一个状态机来解包
Task<>
中的值。所以,加倍努力:
从单元测试的Angular 来看,这相当于:
这里的一个区别是,当你在async/await上加倍时,代码必须更加努力地在lambda中打开Task。只要你在lambda之外等待,单元测试应该没问题。