XUnit, AutoFixture und Moq best practice

Bin ich beim Lesen eine Menge an Dokumentation und Beispiele über, wie man richtig Einheit-test-Dinge, die die Kombination der drei Komponenten in den Titel. Ich kam mit einer test-Methode für eine Methode, auf meinem business-Logik, aber es fühlt sich sehr klobig und schmutzig.

Ich würde gerne einige Rückmeldungen von Menschen, die mehr Erfahrung auf diesem Thema, um zu sehen, wie kann ich es verbessern.

Hier ist der code, Erklärung folgt:

[Fact]
public void ShouldGetItemWithSameId()
{
    var fixture = new Fixture().Customize(new AutoMoqCustomization());
    var facade = fixture.Freeze<Mock<IDataFacade>>();
    facade.Setup(c => c.Get(It.IsAny<int>())).Returns((int i) => new Item { Key = i });

    var sut = fixture.Create<BusinessLogic>();
    var expected = fixture.Create<int>();

    Assert.Equal(expected, sut.Get(expected).Key);
}

Meine BusinessLogic - Klasse nimmt ein IDataFacade als Konstruktor-parameter, die verantwortlich in seiner Get(int) Methode auf, um das Element mit der gleichen Id, ziemlich grundlegende Dinge.

Habe ich eingefroren, die IDataFacade mock und ich es bis zu dem erstellen einer object-matching-Id in It.IsAny<int>. Ich habe dann meine SUT und testen Sie es. Funktioniert einwandfrei.

Ich würde gerne verstehen, ob ich das verbessern kann, Dinge, die unter Berücksichtigung der folgenden:

  • Ich habe zum test komplexer Methoden, wie ein Query Methode, die eine Klasse enthält eine Menge von Eigenschaften, die verwendet werden, die als Filter auf passende Eigenschaften auf den Typ abgefragt werden. In diesem Fall würde ich nicht wissen, wie man richtig führen Sie die "Setup" - Teil des Prototyps, da habe ich zu initialisieren, alle oder fast alle, der Eigenschaften der zurückgegebenen Typ, und in diesem Szenario ist es nicht ein einzelnes Element, sondern eine ganze Sammlung
  • Der setup-Teil fühlt sich fehl am Platz, ich möchte in der Lage sein zu verwenden es in mehr Methoden

Habe ich einige andere tests mit Theory mit AutoMoqData aber ich war nicht in der Lage, dies zu erreichen test (und ich denke, die komplexer sind) diesen Ansatz verwenden, also habe ich wieder umgestellt auf nur Fact mit manuell instanziiert Leuchte.

Jede Hilfe wird sehr geschätzt.

InformationsquelleAutor Matteo Mosca | 2014-12-18
Schreibe einen Kommentar