using FluentValidation.TestHelper;
public static void Main()
Console.WriteLine("Hello World - " + DateTime.UtcNow);
var validator = new UserValidator();
new [] { "http://www.aa.com" },
new [] { "http://www.aa.com", "https://www.bbbb.com" }
Console.WriteLine("Testing valid data...");
validator.ShouldNotHaveValidationErrorFor(u => u.Name, "aaa");
validator.ShouldNotHaveValidationErrorFor(u => u.Links, goodLinks[0]);
validator.ShouldNotHaveValidationErrorFor(u => u.Links, goodLinks[1]);
Console.WriteLine("Testing **invalid** data...");
new [] { "dsfsdfd", "112321!!!!" }
validator.ShouldHaveValidationErrorFor(u => u.Links, badLinks[0]);
Console.WriteLine("-end of tests-");
public string Name { get; set; }
public string[] Links { get; set; }
public class UserValidator : AbstractValidator<User>
ValidatorOptions.CascadeMode = CascadeMode.StopOnFirstFailure;
RuleFor(user => user.Name)
.WithMessage("User name missing. blah blah. eg. Princess Leia.");
RuleForEach(user => user.Links)
.WithMessage("Link '{PropertyValue}' must be a valid URI. eg: http://www.SomeWebSite.com.au");
private static bool LinkMustBeAUri(string link)
if (string.IsNullOrWhiteSpace(link))
var x = Uri.TryCreate(link, UriKind.Absolute, out result) &&
(result.Scheme == Uri.UriSchemeHttp ||
result.Scheme == Uri.UriSchemeHttps);