Différence entre les faits et la théorie? - xUnit.net
je suis nouveau à xUnit.net et AutoFixture.
je travaille actuellement sur un "projet test" pour me familiariser avec xUnit.net et Autofixture. Il y a une petite chose que je ne comprends pas.
Quelle est la différence entre [Fact]
et [Theory, AutoMoqData]
?
pourriez-vous me dire si les deux codes suivants sont égaux? Je demande cela parce que le Test réussit avec les deux, mais je veux apprendre le droit façon.
[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));
}
et
[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));
}
Ce qui me fait penser qu'il y a une différence, ce sont les mots clés [Fact]
et [Theory]
.
je suppose que le [Theory]
les mots-clés indiquent xUnit.net cadre que les données fournies proviennent de quelque part, où quelque part est Autofixture. Alors que les [Fact]
ne dit rien à xUnit sur l'origine des données et je dois construire les objets manuellement.
1 réponses
en Supposant que votre [AutoMoqData]
l'attribut ressemble à quelque chose comme ceci:
public class AutoMoqDataAttribute : AutoDataAttribute
{
internal AutoMoqDataAttribute()
: base(new Fixture().Customize(new AutoMoqCustomization()))
{
}
}
Ensuite, oui, ces deux tests sont équivalents.
[Fact]
et [Theory]
les attributs sont définis par xUnit.net.
[Fact]
l'attribut est utilisé par le xUnit.net lanceur de test pour identifier un niveau "normal" de l'unité de test: une méthode de test qui ne prend pas d'arguments de méthode.
[Theory]
l'attribut, de l'autre, s'attend à un ou plusieurs DataAttribute
instances pour fournir les valeurs pour un Test Paramétré's des arguments de méthode.
xUnit.net lui-même fournit divers attributs qui dérivent de DataAttribute
:[InlineData]
,[ClassData]
,[PropertyData]
.
des crochets D'AutoFixture dans ce point d'extensibilité de xUnit.net en fournissant le [AutoData]
l'attribut. Il peut être utilisé pour rendre les tests plus déclaratifs.