No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Parámetros en Pruebas Unitarias con Theory e InlineData en XUnit

9/19
Recursos

Aportes 10

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Mi test de IsPalindrome usando Theory e InLineData \[Theory] \[InlineData("oro",true)] \[InlineData("hello", false)] public void IsPalindromeTest(string word, bool expected) { var strOperations = new StringOperations(); var result = strOperations.IsPalindrome(word); if (expected) { Assert.True(result); } else { Assert.False(result); } }
Esta es mi implementacion de QuantityInWords, tuve que reemplazar el .StartsWith() y el contains para evitar pasar mas parametros a la funcion :d \[Theory] \[InlineData("car", 10, "ten cars")] \[InlineData("country", 4, "four countries")] \[InlineData("dog", 1, "one dog")] \[InlineData("tree", 100, "one hundred trees")] public void QuantityInWordsTest(string input, int quantity, string expected) { // Arrange var operations = new StringOperations(); // Act var result = operations.QuantintyInWords(input, quantity); //Assert Assert.NotEmpty(result); Assert.Equal(expected, result); }
Los atributos **Theory** e **InlineData** en xUnit permiten crear pruebas unitarias más eficientes y reutilizables. **Theory** se utiliza para indicar que un método de prueba puede aceptar parámetros, mientras que **InlineData** proporciona los valores específicos que se pasarán a dicho método. Esto permite ejecutar una misma prueba con diferentes conjuntos de datos, lo que ayuda a cubrir múltiples escenarios sin duplicar el código de la prueba. Por ejemplo, si tienes una función que convierte números romanos a enteros, puedes usar **InlineData** para probar diferentes valores romanos y sus correspondientes enteros en una única prueba. Esto mejora la claridad y mantenimiento de tus pruebas unitarias.
```js // segundo ejercicio de la funcion QuantintyInWords [Theory] [InlineData("movie", 5, "cinco movies")] [InlineData("apple", 3, "tres apples")] [InlineData("car", 1, "uno car")] //[InlineData("laptop", 2, "uno car")] // caso no pasa la prueba public void QuantityInWords(string word, int number, string expectedResult) { // Arrange var strOperations = new StringOperations(); // Act var result = strOperations.QuantintyInWords(word, number); // Assert Assert.StartsWith(expectedResult.Split(' ')[0], result); // Verifica que el resultado empiece con el número en texto Assert.Contains(word, result); // Verifica que contenga la palabra //Assert.Equal(expectedResult, result); // Verifica la igualdad completa } ```
Hola, asi hice la funcion IsPalindrome con \[Theory] \[Theory] \[InlineData("Hello", false)] \[InlineData("awa", true)] \[InlineData("Rapar", true)] public void IsPalindrome(string input, bool isPalindrome) { //Arrange var strOperations = new StringOperations(); //Act var result = strOperations.IsPalindrome(input); //Assert Assert.Equal(isPalindrome, result); }
Mi ejercicio con IsPalindrome\_Theory \[Theory] \[InlineData("ama")] \[InlineData("rama")] \[InlineData("caac")] public void IsPalindrome\_Theory(string palabra) { // Arrange var strOperation = new StringOperations(); //Act var result = strOperation.IsPalindrome(palabra); // Assert Assert.True(result); }
De esta forma hice las dos pruebas en el GetStringLength ![]()![](https://static.platzi.com/media/user_upload/Captura%20de%20pantalla%202023-10-19%20a%20la%28s%29%201.33.20%E2%80%AFp.%C2%A0m.-13cab0a4-a2e6-49f4-b896-fddcfcc598e9.jpg)
en el codigo siguiente, si remuevo el `else` entonces la prueba tambien pasa valida, como si estuviera haciendo el `Assert.False`, hay una forma de evitar esto? o que opcion hay? ```c# [Theory] [InlineData("ama", true)] [InlineData("other", false)] public void IsPalindromeTest(string word, bool expected) { // Arrange var strOperations = new StringOperations(); // Act var result = strOperations.IsPalindrome(word); // assert if (expected) { Assert.True(result); } else { Assert.False(result); } } ``` \[Theory] \[InlineData("ama", true)] \[InlineData("other", false)] public void IsPalindromeTest(string word, bool expected) { // Arrange var strOperations = new StringOperations(); // Act var result = strOperations.IsPalindrome(word); // assert if (expected) { Assert.True(result); } else { Assert.False(result); } }

Mi test de GetStringLength

        [Fact]
        public void GetStringLength()
        {
            var strOperations = new StringOperations();

            var result = strOperations.GetStringLength("rice");

            Assert.Equal(4, result);
        }