es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

xUnit – Pasar List<> a mi prueba está generando un error.

Estoy considerando usar xUnit para las pruebas. Me gustan algunas de sus características.

Estoy tratando de crear una lista<> y pasarla como parámetro de la prueba:

[Theory]
[InlineData( new List<IDispenseEntity>() )]
public void Test1(List<IDispenseEntity> data)
{

// Aquí va alguna prueba Assert.Equal(2, 2);

}

Obtengo el siguiente error:

Un argumento de atributo debe ser una expresión constante, una expresión typeof o una expresión de creación de matriz del tipo de parámetro del atributo

Quiero probar varias listas<> con diferentes combinaciones de elementos en la lista.

¿Cómo paso una List<> a mi prueba?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para pasar un List<> a una prueba de xUnit, necesitas usar un enfoque ligeramente diferente. En lugar de usar [InlineData], puedes usar [MemberData] o [ClassData] para proporcionar tus datos de prueba. Aquí tienes un ejemplo:

    public static class TestData
    {
        public static IEnumerable<object[]> GetLists()
        {
            yield return new object[] { new List<idispenseentity>() };
            yield return new object[] { new List<idispenseentity> { new DispenseEntity() } };
            yield return new object[] { new List<idispenseentity> { new DispenseEntity(), new DispenseEntity() } };
        }
    }
    
    public class MyTests
    {
        [Theory]
        [MemberData(nameof(TestData.GetLists))]
        public void Test1(List<idispenseentity> data)
        {
            // Algunas pruebas aquí
            Assert.NotNull(data);
        }
    }
    

    En este ejemplo, creamos una clase estática llamada TestData que tiene un método llamado GetLists. Este método devuelve un IEnumerable<object[]>, donde cada object[] representa un conjunto de argumentos para probar el método. En este caso, cada conjunto de argumentos es un solo List.

    Luego decoramos nuestro método de prueba con el atributo [Theory] y el atributo [MemberData]. El atributo [MemberData] le indica a xUnit que use el método TestData.GetLists como fuente de nuestros datos de prueba.

    Cuando ejecutamos esta prueba, xUnit llamará al método TestData.GetLists y generará una ejecución de prueba para cada conjunto de argumentos devuelto por el método. En este caso, obtendremos tres ejecuciones de prueba: una para una lista vacía, una para una lista con un elemento y una para una lista con dos elementos.

    Ten en cuenta que también necesitamos crear una clase que implemente la interfaz IDispenseEntity (en este ejemplo, simplemente la llamamos DispenseEntity) para tener algo que poner en nuestra lista de prueba.</object[]></object[]>

Comments are closed.