【发布时间】:2016-08-02 09:57:27
【问题描述】:
REF:A .NET Fiddle 的(基本上)代码,如下。
我正在尝试使用 FluentValidation 测试 string 是否是有效的 Uri:
public class LinksValidator : AbstractValidator<string>
{
public LinksValidator()
{
RuleFor(x => x)
.Must(LinkMustBeAUri)
.WithMessage("Link '{PropertyValue}' must be a valid URI. eg: http://www.SomeWebSite.com.au");
}
private static bool LinkMustBeAUri(string link)
{
if (string.IsNullOrWhiteSpace(link))
{
return false;
}
Uri result;
return Uri.TryCreate(link, UriKind.Absolute, out result);
}
}
对于验证测试...
public class LinksValidatorTests
{
private readonly LinksValidator _linksValidator;
public LinksValidatorTests()
{
_linksValidator = new LinksValidator();
}
[Theory]
[InlineData("Http://www.SomeDomain.com")]
[InlineData("https://www.SomeDomain.com")]
[InlineData("http://www.SomeDomain.com.au")]
public void GivenAValidUri_Validate_ShouldNotHaveAValidationError(string uri)
{
// Arrange.
// Act & Assert.
_linksValidator.ShouldNotHaveValidationErrorFor(l => l, uri);
}
}
但该测试方法的最后一行没有编译:
如何向编译器提供提示以告诉它使用哪种方法?
【问题讨论】:
-
没有办法,因为你的类型是同一个字符串,字符串。您将不得不使用不同的技术,以便您的 lambda 不是 l => l。我对此几乎没有经验,但我从未见过有人在没有检查过属性的情况下使用它。 l => l.blah
标签: c# .net fluentvalidation