Eclipse: Argumente vertauschen mit Hilfe von Regular Expressions

Bild eines Gatter-Tauschvorgangs A,T nach T,A
Symbolbild Tauschworgang | © Wikimedia Commons | CC0 1.0 Deed

Ich habe kürzlich ein Projekt von JUnit nach TestNG migriert. Mit Hilfe des Ecplipse Plugins war das ein one-click Task. Jede assert-Methode wird duch das Pendant in der Klasse org.testng.AssertJUnit ersetzt. Dies ist aber nur eine Zwischenlösung. Das Ziel ist die Verwendung von org.testng.Assert. Dies birgt eine kleine Herausforderung. JUnit’s assert-Methoden mit zwei Argumenten, z.B. assertEquals oder assertSame definieren die Reihenfolge expected, actual. TestNG definiert dies genau umgekehrt. Deswegen müssen die Argumente vertauscht werden.

Das Vertauschen wird erreicht mittels Find/Replace und Regular Expressions. Um bspw. in allen assertEquals-Methoden die Argumente zu vertauschen, führen Sie folgende fünf Schritte aus:

  1. Innerhalb der jeweiligen Testklasse den Find/Replace-Dialog aufrufen, entweder über den Meüeintrag Edit oder mit der Tastenkombination [Strg]-F.
  2. Den Haken bei Regular expressions setzen.
  3. assertEquals\(([^,]+),\s*([^)]+)\s*\) in das Textfeld Find eingeben.
  4. assertEquals(\2, \1) in das Textfeld Replace eingeben.
  5. Den Button Replace All klicken.
Screenshot des Find/Replace-Dialogs in Eclipse, gefüllt mit allen o.a. Werten
Screenshot des Find/Replace-Dialogs in Eclipse, gefüllt mit allen o.a. Werten

In der Expression im Textfeld Find werden zwei Capturing Groups verwendet. Sie werden erzeugt mit ([^,]+) und ([^)]+). Im Textfeld Replace werden sie in vertauschter Reihenfolge referenziert mit \2 und \1.