我确定我正在以错误的方式使用 FluentValidation,我尝试四处搜索,但可能没有使用正确的术语。任何帮助表示赞赏。
所以,我正在使用一个库,并且因为它处理文件系统,所以我正在模拟它(感谢它有接口,这样我就可以快速做到这一点!)
我试图模拟的对象,它代表一个 excel 工作表,有一个本质上称为“IsEmpty(boolean aBooleanToSet)”的方法。
我可以用 Moq 来写这个:
mockWorkbook.Setup(m => m.IsEmpty(It.IsAny<bool>())).Returns(true);
我的验证器类非常简单,如下所示:
public class InvoiceDetailsWorksheetValidator : AbstractValidator<IXLWorksheet>
{
public InvoiceDetailsWorksheetValidator()
{
RuleFor(x => x.IsEmpty())
.NotEqual(true).WithMessage("Worksheet must not be empty.");
}
}
我有以下测试,使用 xUnit.net:
[Fact]
public void Validate_WithFirstWorksheetEmpty_ReturnsInvalid()
{
// Get the otherwise valid worksheet
var mockWorkbook = TestHelper.GetMockValidInvoiceDetailsWorksheet();
// Set the one specific value to a mocked failure
mockWorkbook.Setup(m => m.IsEmpty(It.IsAny<bool>())).Returns(true);
// Pass the mock object to the validator
var validationResults = new InvoiceDetailsWorksheetValidator().Validate(mockWorkbook.Object);
// Assert that the validator finds it invalid
Assert.False(validationResults.IsValid);
}
当我运行测试而不是通过测试时,我看到来自 FluentValidation 的以下错误:
System.InvalidOperationException
无法为表达式 x => x.IsEmpty() 自动确定属性名称。
请通过调用“WithName”指定自定义属性名称。
我究竟做错了什么?