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」を呼び出してカスタム プロパティ名を指定してください。
私は何を間違っていますか?