c# - ¿Diferencia entre hecho y teoría?-xUnit.net
autofixture (1)
Suponiendo que su atributo [AutoMoqData]
parece a esto:
public class AutoMoqDataAttribute : AutoDataAttribute
{
internal AutoMoqDataAttribute()
: base(new Fixture().Customize(new AutoMoqCustomization()))
{
}
}
Entonces, sí , esas dos pruebas son equivalentes.
Los atributos [Fact]
y [Theory]
están definidos por xUnit.net.
El corredor de prueba xUnit.net usa el atributo [Fact]
para identificar una prueba de unidad "normal": un método de prueba que no toma argumentos de método.
El atributo [Theory]
, por otro lado, espera que una o más instancias de DataAttribute
proporcionen los valores para los argumentos del método de una prueba parametrizada .
xUnit.net proporciona varios atributos que se derivan de DataAttribute
: [InlineData]
, [ClassData]
, [PropertyData]
.
AutoFixture se enlaza con este punto de extensibilidad de xUnit.net al proporcionar el atributo [AutoData]
. Se puede utilizar para hacer pruebas más declarativas.
Soy nuevo en xUnit.net y AutoFixture.
Actualmente estoy trabajando en un "proyecto de prueba" para familiarizarme con xUnit.net y Autofixture. Hay una pequeña cosa que no entiendo.
¿Cuál es la diferencia entre [Fact]
y [Theory, AutoMoqData]
?
¿Podría decirme si los siguientes dos códigos son iguales? Estoy preguntando esto porque la prueba tiene éxito con ambos, pero quiero aprenderlo de la manera correcta.
[Fact]
public void UpdateVersionWillUpdateCorrectlyInRepository()
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var contract = fixture.Create<VersionContract>();
var version = fixture.Create<Version>();
fixture.Freeze<Mock<IContractMapper>>()
.Setup(r => r.Map(contract)).Returns(version);
var repMock = fixture.Freeze<Mock<VersionRepository>>();
var sut = fixture.Create<VersionManagementService>();
sut.UpdateVersion(contract);
repMock.Verify(r => r.UpdateVersion(version));
}
y
[Theory, AutoMoqData]
public void UpdateVersionWillUpdateCorrectlyInRepository(
VersionContract contract,
Version version,
[Frozen]Mock<IContractMapper> mapMock,
[Frozen]Mock<VersionRepository> repMock,
VersionManagementService sut)
{
mapMock.Setup(r => r.Map(contract)).Returns(version);
sut.UpdateVersion(contract);
repMock.Verify(r => r.UpdateVersion(version));
}
Lo que me hace pensar que hay una diferencia son las palabras clave [Fact]
y [Theory]
.
Supongo que las Palabras clave de [Theory]
le dicen al marco de trabajo xUnit.net que los datos proporcionados provienen de algún lugar, donde en algún lugar se encuentra Autofixture. Considerando que [Fact]
le dice a xUnit nada sobre el origen de los datos y necesito construir los objetos manualmente.