Pergunta

MbUnit tem um grande atributo:. MultipleCultureAttribute

Eu estou querendo saber se existe uma maneira fácil de fazer isso em MSTest? Até agora, o melhor que posso dar é:

  • Externalizating o código de teste real para um método particular
  • Salvando a cultura atual
  • Definindo a cultura e chamando o método privado (repetido para cada cultura)
  • E, finalmente, reverter para a cultura original

Na melhor das hipóteses, ele pode ser descrito como feio ... e detalhado.

Foi útil?

Solução

A abordagem mais simples pode ser usar um delegado anônimo, no entanto ter em mente que MSTest vai tratar isso como um único teste por isso pode ser difícil distinguir resultados para diferentes culturas.

por exemplo. código áspera por abordagem delegado anônimo.

public static class MultipleCultures
{
    public static void Do(Action action, params CultureInfo[] cultures)
    {
        CultureInfo originalCulture = Thread.CurrentCulture;

        try
        {
            foreach (CultureInfo culture in cultures)
            {
                Thread.CurrentCulture = culture;

                try
                {
                    action();
                }
                catch
                {
                    Console.WriteLine("Failed while running test with culture '{0}'.", culture.Name);
                    throw;
                }
            }
        }
        finally
        {
            Thread.CurrentCulture = originalCulture;
        }
    }
}

[TestClass]
public class Fixture
{
    [TestMethod]
    public void Test()
    {
        MultipleCultures.Do(() =>
        {
            // test code...
        }, CultureInfo.InvariantCulture, CultureInfo.GetCulture("en-GB"));
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top