Unit testing ValidationAttribute message localizatiom

Takeshi Masukawa 1 Reputation point
2021-04-08T03:06:36.003+00:00

I'm developing ASP.NET Core Web API project.

I tried to test a POCO like following:

public class Poco{
    [Required(ErrorMessageResourceType = typeof(SharedResource), ErrorMessageResourceName = "Required")]
    public string Id {get; set; }
}

I prepared resource files of some languages for "Required" message.
This perfectly works when I launch the project.

Then, I tried to test this validation message by code below but it always returns ja-JP message (My default locale is ja-JP).

    [TestClass]
    public class TestPoco
    {
        [TestMethod]
        public void ErrorMessageLocalized()
        {
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
            var item = new Poco() { Id = null };
            var validationResultList = new List<ValidationResult>();
            Validator.TryValidateObject(item, new ValidationContext(item), validationResultList);
            var message = validationResultList[0].ErrorMessage;
            Assert.AreEqual("The field [ID] is required", message);
        }

    }

How can I test other languages?

Update:

This problem resolved by changing CurrentUICulture instead of CurrentCulture.
CurrentCulture does not affect localization, it affects culture-dependent formatting and parsing.
Thank you for help.

ASP.NET Core
ASP.NET Core
A set of technologies in the .NET Framework for building web applications and XML web services.
4,208 questions
{count} votes