Pregunta

MbUnit tiene un gran atributo:. MultipleCultureAttribute

Me pregunto si hay una manera fácil de hacer esto en MSTest? Hasta el momento, lo mejor que puedo llegar a decir:

  • Externalizating el código de prueba real a un método privado
  • Ahorro de la cultura actual
  • Configuración de la cultura y la llamada al método privado (se repite para cada cultivo)
  • Y, por último, volviendo a la cultura de origen

A lo sumo, puede ser descrito como feo ... y detallado.

¿Fue útil?

Solución

El enfoque más simple puede ser utilizar un delegado anónimo, sin embargo tenga en cuenta que MSTest va a tratar esto como una sola prueba de lo que puede ser difícil distinguir los resultados de las diferentes culturas.

por ejemplo. código áspera por un enfoque 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top