Escrito el 27/05/2024

xUnit: Asserts

Se usan para confirmar que una variable/método tiene lo que se espera que tenga. Ya sea un valor igual, distinto o incluso que dispare una excepción

Basicos

Assert.True(result.IsSuccess);
Assert.False(result.Fail);

Assert.Null(result);
Assert.NotNull(result);

Números

Assert.Equal(10, result.PageCount); // integers
Assert.Equal(2.7, result.PageCount); // doubles exacto
Assert.Equal(2.7, result.PageCount, 1); // doubles con 1 decimal de comparación
Assert.GreaterThan(10, result.PageCount); // mayor que

String

Assert.Equal("Search Result (page 1)", result.Title); // case sensitive
Assert.Equal("Search Result (page 1)", result.Title, ignoreCase: true); // ignore case

Assert.Contains("Search Result (page", result.Title); // chequea que exista un texto en el resultado
Assert.Contains("Search Result (page", result.Title, StringComparison.InvariabtCultureIgnoreCase); // ignorar el case

Assert.StartWith("Search", result.Title); // empieza con ese texto (case sensitive)
Assert.StartWith("Search", result.Title), StringComparison.InvariabtCultureIgnoreCase; // empieza con ese texto (ignore case)

Assert.EndsWith(")", result.Title); // termina con ese texto (case sensitive)
Assert.EndsWith(")", result.Title, StringComparison.InvariabtCultureIgnoreCase); // termina con ese texto (ignore case)

Assert.Matches("[A-Z]{1}[a-z]+ [A-Z]{1}[a-z]+", result.Title) // usar expresiones regulares para chequear la estructura

Assert.True(!string.IsNullOrEmpty(result.Title));

Colecciones

Assert.All(result.CollectionData, n => Assert.True(x > 0)); // validar todos los elementos de una colección

Assert.Contains(12, result.CollectionData); // validar que un valor exista en la colección
Assert.DoesNotContains(12, result.CollectionData); // validar que un valor NO exista en la colección

Assert.Equal(new List<int>() {1, 3, 4, 5, 6}, result.CollectionData); // validar que una colección tiene los mismos valores

Assert.InRange(result.PageCount, 1, 100)// validar que un valor se encuentra en un rango de valores posibles

Excepciones

Assert.Throws<Exception>(() => result.FunctionThatShouldFail()); // para chequear que una excepción del tipo especifico es lanzada

// con un mensaje particular
var exceptionDetails = Assert.Throws<Exception>(() => result.FunctionThatShouldFail());
Assert.Equal("Mensaje de la excepción", exceptionDetails.Message);

Tipos de objetos

// para validar que un objeto es de una clase particular (especial para herencias)
Assert.IsType(typeof(ExpectedClass), result.Data);

// para chequear la clase y luego algún dato del obejto
var data = Assert.IsType<ExpectedClass>(result.Data);
Assert.NotNull(data.OnlyExpectedClassProperty);