検証中のオブジェクトに検証中の子クラスがある場合、流暢な検証クラスの単体テストを作成することは可能ですか?
例として:私のクラスは次のようになります
public class TestModel
{
public class SubData
{
public int SubDataVal { get; set; }
}
public int ParentVal { get; set; }
public SubData Sub { get; set; }
}
私の検証ロジックは次のようになります。
public class TestModelValidator : AbstractValidator<TestModel>
{
public TestModelValidator()
{
RuleFor(o => o.ParentVal).GreaterThan(0);
RuleFor(o => o.Sub.SubDataVal).GreaterThan(0);
}
}
そして、次の単体テストを書くと
[Test]
public void Should_have_error_when_val_is_zero()
{
validator = new TestModelValidator();
validator.ShouldHaveValidationErrorFor(model => model.ParentVal, 0);
}
「System.NullReferenceException : オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示されます。FluentValidation.TestHelper.ValidatorTester`2.ValidateError(T instanceToValidate)からの例外
( RuleFor(o => o.Sub.SubDataVal).GreaterThan(0);行を削除すると、機能します!)
同様に、実際の子クラスを単体テストしようとすると、次のようになります。
[Test]
public void Should_have_error_when_sub_dataVal_is_zero()
{
validator = new TestModelValidator();
validator.ShouldHaveValidationErrorFor(model => model.Sub.SubDataVal, 0);
}
「System.Reflection.TargetException : オブジェクトがターゲット タイプと一致しません」というメッセージが表示されます。from FluentValidation.TestHelper.ValidatorTester`2.ValidateError(T instanceToValidate)