Automatisierung beim Schreiben von Unittests

Test schreiben ist oft eine sehr repetitive Sache. Hier kann man viel automatisieren – z.B. die Testklasse zu seiner Klasse erstellen lassen:

  • Rechtsklick auf die Datei mit der zu testenden Klasse
  • New / Php Test / PhpUnit Test
  • Er will mir die Testklasse leider immer im aktuellen Verzeichnis erstellen – wie man das ändert habe ich leider noch nicht gefunden, somit muss ich in dem Feld Directory immer noch “src” gegen “test” austauschen. (EDIT: Rechte Maustaste auf das Verzeichnis test im Projekt-Explorer, “Mark Directory as / Test Source Root”. Danke, Jens! – Zu “Mark Directory As” wird es auch bald mal einen Beitrag geben)
  • Für bestehende Methoden der Klasse könnten nun auch gleich test-Methoden erzeugt werden. Trifft bei mir seltener zu, da ich in der Regel die Tests zuerst schreibe.

 

Die Datei wird nun angelegt und ich kann gleich Tests schreiben. Also klicke ich in die Klasse und drücke <Alt>-<Einfg>:

Das Problem: Was mir generiert wird, passt mir nicht:

Was ich haben will ist das:

/**
 * | <-Hier soll der Cursor zu Beginn stehen
 *
 * @test
 * @return void
 **/
public function itShould|() {

}

Glücklicherweise kann man das konfigurieren!

Also ab in die Settings:

Leider zieht er dieses Template aktuell (V2017.3) nur beim Erstellen der Klasse (siehe Oben “Generate test methods for”).

Also Variante II: Live Templates (siehe auch Live Templates)

Ich lege ein neues PHP Live Template an, dass auf “tm” reagiert. Zwei Variablen (comment und name) sind per $$-Notation eingefügt. Was hier passieren soll, kann ich über “Edit Variables” noch definieren:

Comment ist einfach ein Freitextfeld, hier kann ich einen Text eingeben. Bei Name schlägt er mir zwei Texte vor, aus denen ich auswählen kann, und die ich dann nach-bearbeiten kann.

Im Code gebe ich jetzt tm<TAB> ein, und lande mit dem Cursor an der Stelle, in der im Template die erste Variable $COMMENT$ definiert ist:

Jetzt kann ich meinen Kommentar tippen, und mit <Return> abschließen.

Der Cursor springt nun zur nächsten Variable, und bietet dort wie bestellt zwei Werte zur Auswahl an:

Nachdem ich den Methodennamen vervollständigt habe, springt der Cursor nun ans Ende des Templates:

Eigentlich sollte der Cursor aber nun in der Methode stehen, und nicht nach der schließenden Klammer.

 

Wie man das löst (Tipp: Gimme more variables!) überlasse ich dem Leser als Hausaufgabe! 😀

About the author

People Enabler at CHECK24