Erstellen einer Mapping-Funktion über TDD: Zu viel Zeit damit verbracht das Schreiben von Tests?

StackOverflow https://stackoverflow.com/questions/2078321

  •  21-09-2019
  •  | 
  •  

Frage

Ich bin ein großer TDD-Enthusiasten, und bemühen uns immer zu schreiben Tests vor der Produktion Code zu schreiben korrekte Verhalten des Codes, um sicherzustellen, dass ich schreibe. Gelegentlich jedoch einige Frage, ob es ratsam, eine große Anzahl von Tests für bestimmte Arten von Verfahren zu schreiben. Dies scheint am häufigsten zu kommen, wenn eine Mapper-Klasse zu schreiben.

public class FooBarMapper
{
    public Foo MapToFoo(Bar bar)
    {
        return new Foo
        {
            Id = bar.Id,
            Name = bar.Name,
            FooYuk = bar.Beverage,
            /* ... */
        };
    }
}

Nehmen wir zum Beispiel, dass es etwa ein Dutzend Objekte zum oben abzubilden. In einer TDD-Umgebung, bevor Sie einen der Zuordnungen zu schreiben, würde ich wahrscheinlich einen Test schreiben. So etwas wie MapToFooMapsBeverageToFooYuk(). Der Test schlägt fehl, was mir den Code zu schreiben, um es Pass. Ich wiederhole dies für jede Eigenschaft abzubilden. Die Frage ist: Ist das unter Test-First-Entwicklung zu weit? Ich persönlich glaube nicht, da ich eher eine vollständige Suite von Tests haben würde mir genau zu sagen, was der Code tut, aber ich würde gerne hören, was die Gemeinschaft denkt.

War es hilfreich?

Lösung

Auch Onkel Bob Martin, ein überzeugter Verteidiger von TDD und alle Dinge TDD, sagt, dass man nicht für jede triviale Eigenschaft zu schreiben Unit-Tests haben (eine triviale Eigenschaft als eine Eigenschaft definiert ist, dass nur empfängt und setzt eine Membervariable ).

Wenn Sie jemals eine Eigenschaft schreiben, die Nebenwirkungen hat (was ich bezweifle, Sie werden), und können Sie einen Komponententest, um es hinzuzufügen. Wie DuffyMo weist darauf hin, wenn Sie Ihre Eigenschaften durch funktionelle Tests abgedeckt sind, sollte es keine Notwendigkeit für Unit-Tests, da es keine Spezifikation von Funktionen, die Sie mit dem Gerät zu testen, andere als die triviale get definieren / set.

Andere Tipps

Vielleicht ist es das, was FitNesse geboren wurde für.

In diesem Fall würde ich einen einzigen Test, dass die Tests alle trivialen Eigenschaften auf einmal schreiben. Es ist nicht ganz der normale Weg, Dinge zu tun, aber schließlich würden die Tests für einzelne triviale Eigenschaften wahrscheinlich für alle Eigenschaften in einem einzigen Test Refactoring werden. Da die Eigenschaften trivial sind, schlage ich mit dem Test-Start-off Sie mit geendet haben.

Nach dem Abbilden der ersten drei Eigenschaften, würde ich die Vervielfältigung sehen und es ersetzen durch über die Eigenschaften Iterieren und Zuweisen von ihnen mithilfe von Reflektion. Das braucht nur ein paar Tests: 0 Eigenschaften, 1 Eigenschaft, 5 Eigenschaften, Zielobjekt nicht die erwarteten Eigenschaften, Quellobjekt nicht die erwarteten Eigenschaften hat. Jetzt kann ich diese allgemeinen Mapping-Engine wiederverwenden überall sonst in allen meinen Anwendungen und ich muß es nicht jedes Mal, wenn ich es verwenden, überprüfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top