Frage

Ein zweiparter mit einem schnellen Intro. Intro: Ich komme von Perl zu Ruby und ich bin ein bisschen verloren unter den Auswahlmöglichkeiten für Testgerüst. Ich verstehe, dass es wahrscheinlich keinen einzigen Allround gibt Beste Wahl, aber ich kann nicht einmal ein klares Bild des Spielfelds bekommen.

Also, zuerst Minitest oder Test :: Einheit? Ich habe gerade festgestellt, dass 1.9.1 jetzt standardmäßig minitest ist. Ich hatte nicht bemerkt, da alle älteren Tests :: Einheit Tutorials noch gut funktionieren. Wenn du require test/unit, Sie erhalten tatsächlich minitest als Test :: Einheit Emulator (!). Mein erster Gedanke war, mit der Standardauswahl des Minitests zu gehen (sobald ich wusste, dass es dort war), aber selbst jüngste Bücher scheinen nicht daran interessiert zu sein, es zu unterrichten. Ruby Best Practices sagt "Es gibt signifikante Unterschiede" zwischen den beiden, aber er entscheidet sich dafür, sich nicht mit ihnen zu befassen. Er führt auch alle seine Tests über Test :: Unit durch (plus einige benutzerdefinierte Add-Ons). Die neue Spitzhahn hat auch sehr wenig über das Minitest an sich, und im Kapitel über Tests verwenden sie auch die Test :: Einheit Emulationsversion von Minitest. Um meine erste Frage zu verdeutlichen: Ist das Minitest eine schlechte erste Option? Sollte ich standardmäßig den Test :: Unit Emulator verwenden?

Zweitens gibt es über die integrierten Optionen hinaus RSPEC, GUCUMBER & COMPANY für verhaltensgetriebene Tests. Kippt sich die Gemeinschaft stark auf diesen Stil und diesen Rahmen? Soll ich einfach mit RSPEC beginnen?

Ich werde ein bisschen mit allen drei spielen, aber ich bin gespannt, welche Art von Konsens (falls vorhanden) in Ruby 1.9 Tests bildet.

(Ein kurzes Follow-up, als Erinnerung an mich und für alle Interessierten. Siehe dieser Link Für einen nützlichen Überblick über die verschiedenen Aufrufe für Test :: Einheit und Minitest in den verschiedenen Rubinen 1.8 bis 1.9.1.)

War es hilfreich?

Lösung

Gibt es Konsens? Ich würde nicht sagen. Es gibt eine starke Community -Stimme für die Verwendung von TDD/BDD, aber selbst dann ist sie nicht universell. Der Rahmen ist wahrscheinlich weniger wichtig als die Anwendung der Praxis in erster Linie.

Ich glaube, dass Minitest der 1,9 -Ersatz für Test :: Unit ist, der nur als Wrapper in der neuen Bibliothek für Rückwärtskompatibilität vorhanden ist. Ich würde vermuten, dass die minitest-spezifische Route zukunftsorientierter wäre.

RSPEC ist eine etwas andere Einstellung: weniger offensichtlich von den "traditionellen" Xunit-beeinflussten Frameworks infundiert. Es lohnt sich, einige Zeit damit zu verbringen, um zu sehen, ob Sie es bevorzugen.

Es gibt auch Sollte. Obwohl ich nicht weiß, wie getestet es ist, ist es auf 1.9: Es ist eher eine Wrapper/Erweiterung für Test :: Unit, also wird es wahrscheinlich funktionieren.

Natürlich hört der Spaß hier nicht auf: Sobald Sie ein Test -Framework ausgewählt haben, möchten Sie einen spöttischen Motor von Art. Oder ein Datenanweisungsersatz.

In allen Fällen würde ich sagen, dass jeder Rahmen, für den Sie Beweise für regelmäßige Updates finden können, eine offene, besiedelte Community und eine API, die Sie nicht hassen, den Job erledigen. Es ist unwahrscheinlich, dass Sie später abgeschossen werden, weil Sie die Wahl getroffen haben, die Sie treffen.

Andere Tipps

Ich benutze RSPEC seit ungefähr einem Jahr. Ich habe von Test :: Einheit speziell, weil ich auf eine menschliche lesbare Weise drucken konnte, was getestet wird.

Es liest wie Prosa. Was für mich ein großes Plus ist. Aber wie bei allem wird die Ergebnisse variieren.

describe Model do
  it "should do what I want" do
    this.should == that
    it.should be_nil
    that.should_not be_true
  end
end 

Auch reguardlos vom Test -Framework sollten Sie auch über ein Deckungswerkzeug nachdenken, wie RCOV. Es integriert sich in RSPEC und zeigt Ihnen an, wo Ihr Code keine Tests gibt.

RSPEC ist der Konsens beliebter Rails -Bücher wie "The Rails Way". Vorteile imho sind Tests, die wie Englisch, Ausgangsformate wie Englisch und Matchern im Fliege lesen. Die Nachteile sind langsam und die Bibliothek fühlt sich manchmal "magisch" an, dh zu fremd für Codierer, die mit Ruby- und Unit -Tests besser vertraut sind. RSPEC bietet auch Gurke und Gherkin an, wie sie Benutzergeschichten schreiben können, die nützliche Kundenakzeptanz sind.

Minitest ist in Ruby 1.9 eingebaut. Profis IMHO sind schnelle Geschwindigkeit, sehr einfach zu lesen/zu schreiben für Codierer anderer Sprachen und Tests, die den gleichen Codestil verwenden, den Sie in Ihrem echten Code verwenden würden. Minitest hat viel mehr als die meisten Menschen wissen, beispielsweise Minitest Spec hat BDD -Matcher, die RSPEC ähneln, Minitest Mock ist ein spöttisches System, und Minitest Benchmark ist für die Leistungsprofilierung.

Nach meiner persönlichen Erfahrung neigen Menschen, die Rails -Apps bauen, zu RSPEC, und Menschen, die reinen Rubincode bauen, neigen dazu, minitest, spec, mock, regel und so weiter.

Ich persönlich Perfer RSPEC. Ich fand, dass die Fokussierung meiner Tests auf Verhalten mir wirklich geholfen hat, das zu verstehen, was ich versuchte.

Verwenden Sie bei RSPEC so etwas wie Werksmädchen oder Maschinist, um Ihre Testdaten zu generieren. Verwenden Sie keine Vorrichtungen.

In Bezug auf das, was Mike gesagt hat, ist das RSPEC -Projekt ziemlich aktiv, wobei neue Versionen mit jeder Rails -Version normal veröffentlicht werden, um die Entwicklung des Frameworks aufrechtzuerhalten.

RSPEC ist nett, aber ich denke, in letzter Zeit wurde viel Gespräch und Bewegung dahinter gesprochen Minitest Das kommt mit Ruby 1.9.x. Es hat viele Feinheiten von RSPEC, ist aber viel schlanker und prägnant.

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