2012-08-02 6 views
14

Kennt jemand eine Methode, um Abdeckungsberichte aus PHPSpec-Tests zu generieren?PHPSpec und Abdeckungsbericht

Ich dachte an xdebug, aber soweit ich weiß kann es keine Berichte für jenkins generieren.

Antwort

38

Wie es steht (1.4.0), unterstützt es noch nicht die Codeabdeckung. Ich freue mich über Ihr Feedback zu diesem Thema. Unten ist meine Meinung zur Code-Abdeckung.

PHPSpec ist ein BDD-Framework. Wenn Sie mit BDD arbeiten, würden Sie das Verhalten Ihrer Klasse vor dem Schreiben Ihrer Klasse beschreiben. Wenn Sie so vorgehen würden, wäre das relevante Verhalten Ihrer Klassen mit "Tests" richtig abgedeckt.

Code Coverage Tools und Metriken sind nützlich für Legacy-Code (Code, den Sie ohne Spezifikationen/Tests geschrieben haben). Sie können ein solches Tool verwenden, um zu versuchen, bis zu einem Punkt zu kommen, an dem Sie TDD fortsetzen können und den Vorteil haben, vor einer Regression geschützt zu sein.

Im Allgemeinen ist dieser Ansatz nicht wirklich so effektiv wie die Beschreibung des Verhaltens zuerst (TDD). Eine einzelne Methode kann einfach genug sein, um auf mehr als ein erforderliches Verhalten zu reagieren. Sie wissen, dass Sie während des TDDing-Prozesses den Prozess immer wieder neu gestalten und nicht benötigten Code löschen. Sie haben am Ende 10 Spezifikationen (Tests), die dieselben Codezeilen durchlaufen, die alle ein unterschiedliches benötigtes Verhalten beschreiben, die alle nützlich sind, um den Code zu verstehen.

Eines der Probleme mit dem Wort "Test" ist, dass es Leute denken lässt, dass es bei TDD um Verifikation geht. Es ist nicht. Es geht um Kommunikation. StoryBDD ist die Kommunikation zwischen den Beteiligten und SpecBDD ist die Kommunikation zwischen den Klassen. Einfach, leben, gerade genug Dokumentation.

Code-Coverage, die garantiert, dass Sie Ihren Code getestet haben, ist ein Irrtum, bestenfalls ein schlechter Messwert. Leider denken die Leute, dass die Teststruktur wichtiger ist als das Testen von Verhaltensweisen. Aus diesem Grund wurde BDD geboren, um den Fokus wieder auf den richtigen Weg zu bringen. Sicherzustellen, dass dieser Teil des Codes getestet wird, ist falsch, weil dieser Teil des Codes mehr als eine Sache kann, sollte es, wenn es schön umgestaltet ist. Auch werden Sie am Ende Dinge wie Accessoren und Modifikatoren und Konstruktoren usw. testen.

Aber ich bin offen, um die Gemeinschaft auf diesem zu hören. Ich kann sehen, wo Code Coverage nützlich sein könnte. Außerdem, da Sebastian Bergmann es wunderbar aus PHPUnit modularisierte, konnte ich es in PHPSpec wiederverwenden. Ich würde es bevorzugen, wenn du zuerst deine Spezifikationen geschrieben hättest. Sie erhalten 100% Codeabdeckung für Ihr relevantes Verhalten kostenlos. Meiner Ansicht nach ist das das Wichtigste.

+1

Ihr Ansatz als mehr erfahrene Person ist sehr wertvoll für mich.Ich fange an, BDD in mein Team zu integrieren, deshalb liegt mir so viel daran, es richtig zu machen und brauchbare Statistiken zu sammeln :) – spamec

+0

Es ist ein großartiger Ansatz für neue Projekte, aber wie wäre es, wenn wir BDD in bestehende Legacy-Projekte implementieren möchten? Hast du irgendwelche Erfahrungen darin? Ist es sinnvoll, Spec für vorhandenen Code zu schreiben? Meiner Meinung nach für alten Code sollte Unit-Tests für neue eine Spezifikationen sein. –

+1

Große Antwort Marcello. Dennoch bietet Code Coverage Sicherheit, Vertrauen, wo es fehlt :) –

6

Ich denke, ein Code-Coverage-Generator würde für Legacy-Systeme nützlich sein, die gerade BDD-Style-Tests unterzogen werden, da Sie erkennen können, welcher Code nicht getestet wurde. Ich für meinen Teil würde eine solche Funktion in PHPSpec zu schätzen wissen.

8

Verwenden Sie die Code Coverage extension to PHPSpec, um Klee zu generieren.

Wenn Sie Coverage-Daten von PHPSpec und anderen Tools (z. B. PHPUnit) zusammenführen möchten, verwenden Sie das Ausgabeformat "PHP_CodeCoverage" mit dem Tool phpcov im Zusammenführungsmodus.

Beispiele:

# phpspec.yml 
extensions: 
    - PhpSpec\Extension\CodeCoverageExtension 

code_coverage: 
    output: /tmp/coverage/phpspec.phpcoverage 
    format: php 

# phpunit.xml 
<logging> 
    <log type="coverage-php" target="/tmp/coverage/phpunit.phpcoverage" /> 
</logging> 

# from the command line 
phpcov merge --clover coverage.xml /tmp/coverage 

Dass Sie Berichterstattung von beiden Tools in einem abschließenden Klee-Format, geeignet für wie Jenkins geben.

Verwandte Themen