Ich bin neu bei xUnit.net und AutoFixture.
Ich arbeite derzeit an einem "Testprojekt", um mich mit xUnit.net und Autofixture vertraut zu machen. Es gibt eine Kleinigkeit, die ich nicht verstehe.
Was ist der Unterschied zwischen [Fact]
und [Theory, AutoMoqData]
?
Könnten Sie mir bitte sagen, ob die folgenden zwei Codeteile gleich sind? Ich frage dies, weil der Test mit beiden erfolgreich ist, aber ich möchte es richtig lernen.
[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));
}
und
[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));
}
Was mich denken lässt, dass es einen Unterschied gibt, sind die Schlüsselwörter [Fact]
und [Theory]
.
Ich gehe davon aus, dass die [Theory]
Schlüsselwörter dem xUnit.net-Framework mitteilen, dass die bereitgestellten Daten von irgendwoher stammen, wo sich irgendwo Autofixture befindet. Während [Fact]
xUnit nichts über den Ursprung der Daten sagt und ich die Objekte manuell erstellen muss.
quelle
Antworten:
Angenommen, Ihr
[AutoMoqData]
Attribut sieht ungefähr so aus:public class AutoMoqDataAttribute : AutoDataAttribute { internal AutoMoqDataAttribute() : base(new Fixture().Customize(new AutoMoqCustomization())) { } }
Dann ja , sind diese beiden Tests gleichwertig.
Beide
[Fact]
und[Theory]
Attribute werden von xUnit.net definiert.Das
[Fact]
Attribut wird vom xUnit.net-Testläufer verwendet, um einen "normalen" Komponententest zu identifizieren: eine Testmethode, die keine Methodenargumente akzeptiert.Das
[Theory]
Attribut erwartet andererseits, dass eine oder mehrereDataAttribute
Instanzen die Werte für die Methodenargumente eines parametrisierten Tests liefern .xUnit.net selbst liefert verschiedene Attribute , die aus ableiten
DataAttribute
:[InlineData]
,[ClassData]
,[PropertyData]
.AutoFixture wird durch Angabe des
[AutoData]
Attributs in diesen Erweiterungspunkt von xUnit.net eingebunden . Es kann verwendet werden, um Tests deklarativer zu gestalten.quelle
AutoDataAttribute
ist in AutoFixture.XUnit und AutoFixture.XUnit2 definiert .Test
s, aber für mich sind aFact
und aTheory
sehr unterschiedlich. Sie könnten eine Theorie testen, aber keine Tatsache ... keine Ahnung ... Sprache ist har d ...