【发布时间】:2021-08-01 11:30:04
【问题描述】:
这是我要测试的方法:
public async Task<object> CreateExpense(CreateExpenseCommand command)
{
var validationResults = await _validator.ValidateAsync(command);
if (!validationResults.IsValid)
{
return validationResults.Errors.First().ToString();
}
//more code that is irrelevant for this post
}
为了测试这一点,我需要模拟_validatior,它被定义为private readonly IValidator<CreateExpenseCommand> _validator;,并通过构造函数注入来使用。
我正在使用带有 AutoMoqCustomizations 和 Moq 的 AutoFixture 进行模拟。也许我应该只使用起订量?
这是我在测试中尝试做的:
[Fact]
public async Task CreateExpense_Success()
{
//Arrange
var service = _fixture.Fixture.Freeze<Mock<IValidator<CreateExpenseCommand>>>();
service.Setup(x => x.Validate((CreateExpenseCommand)It.IsAny<IValidator<CreateExpenseCommand>>())).Returns(It.IsAny<ValidationResult>);
//more code that is irrelevant for this post
}
但是,这会导致错误:
System.NullReferenceException: '对象引用未设置为对象的实例'。
错误是不言自明的,但我不知道如何正确模拟。
【问题讨论】:
标签: c# .net-core mocking fluentvalidation