Frage

Ich arbeite an einem PHP-Projekt mit festen Einheitstests Abdeckung.

Ich habe bemerkt, dass die letzte Mal, ich mache sehr heikel Manipulationen mit Komponententests Befehlszeilen Test Runner‘ -. Filter Befehl

Hier ist dieser Befehl Erklärung von offizieller Dokumentation:

  
    

- Filter

         

läuft nur Tests, deren Name auf das Suchmuster. Das Muster kann entweder der Name eines einzelnen Tests oder ein regulärer Ausdruck sein, der mehrere Testnamen übereinstimmt.

  

ich es ofter benutzen, weil es manchmal sehr nützlich, wird nur eine einzige Testsuite oder Testfall aus der gesamten Testbasis ausgeführt werden.

Ich frage mich, ob dies eine gute Praxis ist oder nicht?

Ich habe gehört, dass manchmal ist es gute Praxis, die gesamte Testsuite auf dem Continuous Integration Maschine laufen zu lassen, wenn Sie wissen sicher, , dass Sie nur eine Komponente geändert haben und 100% zuversichtlich Prozent , dass es nicht eine andere Komponente der Einheit-Tests fehlschlagen wird. Was denken Sie darüber?

Vor einiger Zeit dachte ich, dass wir nicht so viel Pflege sollte über Zeit erfordern die gesamte Suite aller Komponententests laufen, aber wenn man sehr komplizierte Geschäftslogik haben und Komponententests -. Diese erhebliche Zeit in Anspruch nehmen

Ich verstehe, dass „echte“ unit-Tests nicht mit DB interagieren sollten, Mock / Stubs Objekte verwenden, stimme ich mit dem. Aber manchmal ist es viel einfacher (billiger) verwenden DB Vorrichtungen für die Tests.

Bitte geben Sie mir einige Ratschläge, wie dieses Problem gelöst werden kann?

War es hilfreich?

Lösung

Gute Unit-Tests sollte:

  • Haben Sie klare Methoden Namen und Variablennamen als Dokumentation zu handeln
  • Ausführen schnell. Dies wird auch möglich sein, für Test mit kompliziertem Geschäft Logik. Der Test sollte in einem avarage laufen Zeit von etwas um 0,1 Sekunden.
  • Test genau eine Sache in einem Testverfahren
  • Integration nicht mit externen Ressourcen wie das Dateisystem, E-Mail, Datenbanken, Webdiensten und alles andere. Sie können erstellen separate Datenbank Integrationstests Ihre Datenbank ineraction zu testen. Diese Prüfung wird langsamer dann Ihr Gerät die meiste Zeit testen. Ich habe meine Integrationstests in einem separaten Projekt und ich laufe sie nur, wenn ich bin Arbeiten an dem Integrationscode. ich laufen sie auch auf alle auf dem CI baut Server.
  • Seien Sie vollständig voneinander isoliert. Wenn Sie Tests abhängig aufeinander, können Sie nicht sehen, was Ihr Problem ist aus der Lektüre der Tests sind fehlgeschlagen. Möglicherweise müssen Sie Debug das Problem zu finden. Isoliert Tests werden Sie eine Menge Zeit sparen.

Ich persönlich nicht Kategorienamen in meinen Tests verwenden. Ich verwende 2 Testprojekte pro Anwendung. Ein für das Gerät zu testen und ein für die Integrationstests und langsame Tests.

Reaktion auf:

  

"Aber manchmal ist es viel   leichter (billiger) DB Vorrichtungen zu verwenden für   die Tests. "

Wenn Ihr Code gut geschrieben wird, wird es leichter sein, zu verspotten. Ich weiß nicht, über Frameworks in Php spöttisch, aber ich benutze sie in anderen Sprachen mir Zeit viel zu speichern. Schreiben Test ersten und Code später könnte Ihnen helfen, Ihren Code zu entwerfen sein prüfbar einfacher.

Persönlich habe ich gelernt, besser zu testen, indem

  • Lesen Blogs über sie
  • Lesen Bücher darüber
  • Lesen getesteten Code von anderen geschrieben
  • eine Menge Tests natürlich zu schreiben. Es dauerte ein paar thousends von Tests an ihn gut zu werden.

Andere Tipps

  

ich es ofter benutzen, weil es manchmal sehr nützlich, wird nur eine einzige Testsuite oder Testfall aus der gesamten Testbasis ausgeführt werden.

     

Ich frage mich, ob dies eine gute Praxis ist oder nicht?

Sicher, solange Sie den vollen Satz von Komponententests gelegentlich laufen (über einen CI-Server klingt perfekt)

Ausführen der „interessanten“ Tests regelmäßig besser als selten alle Tests laufen ..

Ich würde das Problem beheben, indem eine Teilmenge von Tests mit ( „Rauchversuchen“), die 1 Minute oder weniger, dass muss vor der Festlegung ausgeführt werden, führen Sie dann den vollen Satz von Tests von Ihrem CI-Server.

Wenn Sie Ihre ganze Reihe von Tests dauert> 15 Minuten, dann würde ich sie teilen aussehen und sie parallel ausgeführt werden.

Dann können Sie die --filter verwenden, um die Tests laufen Sie am meisten interessiert in zuerst, dann die Rauchtests vor zu begehen, und haben den Rest laufen aus dem CI-Server.

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