如何测试流畅的验证错误信息

时间:2017-02-08 23:02:31

标签: tdd fluentvalidation

我正在尝试使用TDD,我已经阅读了一些教程,并尝试在我使用流畅验证创建的验证类上实现测试。

public SomeFormValidator()
{
        RuleFor(x => x.MyClass).NotNull()
            .WithMessage("MyClass cannot be null");
}

我专门研究了TDD示例以进行流畅验证并创建了几个测试

    [Test]
    public void Should_have_error_when_MyClass_is_null()
    {
        MyClass myClass = null;
        SomeFormValidator.ShouldHaveValidationErrorFor(aup => aup.MyClass, myClass);
    }

    [Test]
    public void Should_not_have_error_when_MyClass_is_not_null()
    {
        MyClass myClass = new MyClass();
        SomeFormValidator.ShouldNotHaveValidationErrorFor(aup => aup.MyClass, myClass);
    }

我现在想测试字符串“MyClass不能为null”,当它为null时返回。我无法找到任何覆盖返回消息的内容,但我无法解决这个问题。

2 个答案:

答案 0 :(得分:3)

感谢@Surgey的指导,我能够提出一个使用流畅的验证内置方法的解决方案,除此之外,我已经能够更好地布局我在下面添加的测试

result.WithErrorMessage

}

我正在使用Assert.AreEqual因为结果中提供了这个,但是我已经离开了foreach,但发表了评论,因为我发现使用{{1}}生成的错误消息会产生更好的消息试验跑步者。

答案 1 :(得分:1)

有Arrange-Act-Assert(AAA)技术,有助于正确构建单元测试。

安排

首先,您需要创建一个受测试系统(SUT)和输入。在这种情况下,SomeFormValidatorSomeForm个实例:

  // arrange
  var sut = new SomeFormValidator();
  var someFormWithNullProp = new SomeForm { MyClass = null };

然后你需要调用SUT来执行实际工作。对于validators,这是Validate()方法调用:

  // act
  ValidationResult result = sut.Validate<SomeForm>(someFormWithNullProp);

断言

单元测试的最后一部分检查实际结果是否符合预期:

  // assert
  Assert.False(result.IsValid);
  Assert.AreEqual(
    "MyClass cannot be null",
    result.Errors.Single().ErrorMessage);