Fact y Theory
En xUnit, Fact
y Theory
son dos atributos utilizados para definir métodos de prueba, pero tienen algunas diferencias clave en su uso.
Fact:
- Uso:
Fact
se utiliza para definir un método de prueba que no tiene parámetros. Cada método decorado conFact
se ejecutará como una prueba independiente. - Ejemplo:
public class CalculadoraTests { [Fact] public void Sumar_DosNumeros_DeberiaSerCorrecto() { // Arrange, Act, Assert... } [Fact] public void Restar_DosNumeros_DeberiaSerCorrecto() { // Arrange, Act, Assert... } }
Theory:
- Uso:
Theory
se utiliza para definir métodos de prueba que pueden tener parámetros. Cada conjunto único de datos proporcionado a un método decorado conTheory
se considera como una instancia separada de la prueba. - Ejemplo:
public class CalculadoraTests { [Theory] [InlineData(2, 3, 5)] [InlineData(0, 0, 0)] [InlineData(-2, 2, 0)] public void Sumar_DosNumeros_DeberiaSerCorrecto(int a, int b, int resultadoEsperado) { // Arrange, Act, Assert... } }
En el ejemplo anterior, Sumar_DosNumeros_DeberiaSerCorrecto
es un método de teorema porque toma parámetros a través de InlineData
. Para cada conjunto de datos proporcionado (por cada conjunto de parámetros), xUnit ejecutará una instancia separada de la prueba. Esto es útil cuando deseas ejecutar la misma lógica de prueba con múltiples conjuntos de datos.
Ambos Fact
y Theory
se pueden utilizar según la necesidad de tus pruebas. Fact
es más común cuando cada caso de prueba no tiene parámetros, mientras que Theory
es más útil cuando deseas reutilizar la lógica de la prueba con varios conjuntos de datos.