c# xunit.net autofixture

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, , 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.