2013-02-15 9 views
5

Ich habe versucht, einem lockeren TDD-Workflow für eines meiner Open-Source-Projekte zu folgen. Es ist eine API für andere Programmierer zu verwenden.Sollte ich Tests schreiben, bevor sie kompilieren?

Als solche, ein wichtiger Aspekt sowie die API "arbeiten" ist auch Design, wie es verbraucht wird. Ich habe einige Leute sagen hören, dass das Schreiben von Tests, bevor sie kompiliert werden, eine Verschwendung von Zeit ist und dazu neigt, ständig neu geschrieben zu werden, bis die API stabil ist. Ich habe auch gehört, dass es ein Workflow wie so folgen sollte:

  1. Schreiben Sie die Tests, die nicht kompiliert werden
  2. Machen Sie es kompilieren
  3. Machen Sie es grün

Ich war Ich versuche, diesem Workflow zu folgen, aber am Ende habe ich einige komische Dinge. Zum Beispiel in meinem API habe ich diese zwei Methoden:

Handles(string pattern); //had this one already 
Handles(IPatternMatcher pattern); //needed this one 

ich die zweite Form des Verfahrens erhalten benötigt, um meine API hinzugefügt. Also, ich endete mit einem toten einfachen Test wie folgt:

public void Handles_SupportsIPatternMatcher() 
{ 
    var api=new MyAPI(); 
    api.Handles(new TestPatternMatcher()); 
} 

Was scheint wie eine Verschwendung, nachdem es umgesetzt wird.

Sollte ich diesen Workflow weiterverfolgen oder gibt es Möglichkeiten, ihn zu verbessern? Wie kann ich Tests schreiben, die im Grunde nur nach Compilerfehlern suchen? Da es sich um eine öffentlich konsumierbare API handelt, sollte ich mich über solche Tests Gedanken machen?

+1

"Red-Green-Refactor" klingt viel besser als "Compile-Compiles-Green nicht kompilieren": P –

+2

Dies ist eine sehr gute Frage für programmers.stackexchange.com –

+1

@SimonWithehead gut ... technisch Compiler-Fehler auch zählt als "rot" :) – Earlz

Antwort

1

Ich benutze Resharper Sie können die leere Handles-Methode erstellen, die IPatternMatcher erhalten wird. TDD ist eine mächtige Sache, und Sie sollten weiter versuchen. Ich habe beide Wege versucht, vor dem Code zu testen und nach dem Code zu testen, und ich fand, dass der Test vor dem Code machtvolle Sache ist. Sie können Code-Fehler sehr schnell debuggen. Und der Test ist die Garantie, dass Ihr Code wie erwartet funktioniert.

3

Nr

Schreiben Sie nicht Code, der Compiler prüft, ob arbeitet. Diese Art von Tests ist sehr sinnvoll, wenn Sie dynamische Sprachen (oder dynamische Features in einer statischen Sprache) verwenden, wo sie Ihnen tatsächlich sagen, dass Sie etwas vergessen haben, oder etwas in einen fehlgeschlagenen Komponententest umstrukturiert haben.

Der Punkt der Komponententestausführung besteht darin, die Erstellung fehlzuschlagen, wenn sie fehlerhaft ist. Wenn in Ihrem Code ein Compilerfehler auftritt, schlägt der Build bereits fehl. Es besteht keine Notwendigkeit, es zu hinterfragen.