簡體   English   中英

如何對使用流暢驗證創建的“大於”驗證進行單元測試?

[英]How can I unit test a "greater than" validation created with fluent validation?

我有一個如下所示的屬性:

    RuleFor(c => c.foo).GreaterThan(0);

在 fluent 驗證的文檔中,他們指定如果我不能使用“ShouldHaveValidationErrorFor”方法,我可以使用“Validate”方法做出一些斷言,但我無法解決這個問題

我得到的只是這樣的東西:

    public void Should_Have_Error_When_Foo_Isnt_Greater_Than_Zero()
    {
        var bar = new Bar
        {
            Foo = -1
        };

        var result = validator.TestValidate(bar);

        //Assert.True(bar.Foo > 0, ??)
    }

你可以兩種方式都這樣做。

根據提供的信息,假設您的Bar類和BarValidator如下所示:

public class Bar
{
    public int Foo { get; set; }
}

public class BarValidator : AbstractValidator<Bar>
{
    public BarValidator()
    {
        RuleFor(c => c.Foo).GreaterThan(0);
    }
}

...我通常只是針對驗證器執行此操作,它更簡潔。 以下代碼測試通過和失敗狀態。

public class BarValidatorTests
{
    [Test]
    public void Foo_Zero_HasValidationError()
    {
        var validator = new BarValidator();
        var dto = new Bar { Foo = 0 };

        validator.ShouldHaveValidationErrorFor(x => x.Foo, dto);
    }

    [Test]
    public void Foo_One_DoesNotHaveValidationError()
    {
        var validator = new BarValidator();
        var dto = new Bar { Foo = 1 };

        validator.ShouldNotHaveValidationErrorFor(x => x.Foo, dto);
    }
}

如果您確實想使用TestValidate方法,並且在某些情況下您確實想這樣做(當我的類具有子對象集合時使用它,並且我想測試特定子對象上的驗證規則),那么接下來在功能上等同於之前的:

public class BarValidatorTestsUsingTestValidate
{
    [Test]
    public void Foo_Zero_HasValidationError()
    {
        var validator = new BarValidator();
        var dto = new Bar { Foo = 0 };

        var validationResults = validator.TestValidate(dto);

        validationResults.ShouldHaveValidationErrorFor(x => x.Foo);
    }

    [Test]
    public void Foo_One_DoesNotHaveValidationError()
    {
        var validator = new BarValidator();
        var dto = new Bar { Foo = 1 };

        var validationResults = validator.TestValidate(dto);

        validationResults.ShouldNotHaveValidationErrorFor(x => x.Foo);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM