2017-05-30 3 views
1

Ich möchte eine Testmethode in einer meiner Klassen umbenennen, die eine große Anzahl von parametrisierten Objekten verwendet.Rename parametrisierte testMethod

Zum Beispiel, wenn ich ein Testverfahren eingerichtet haben, etwa so:

import org.testng.annotations.DataProvider; 
import org.testng.annotations.Test; 
/** 
* Unit test for simple App. 
*/ 
public class AppTest 
{ 
    static class data_class{ 
     public String name; 
     public String two; 
     public data_class(String name, String two){ 
      this.name = name; 
      this.two = two; 
     } 
    } 

    @DataProvider(name = "prov1") 
    public static Object[] prov1(){ 
     return new Object[] { new data_class("one", "one"), new data_class("two", "two") }; 
    } 

    @Test(dataProvider="prov1") 
    public void testApp(data_class input) 
    { 
     System.out.println(String.format("Name: %s Two: %s", input.name, input.two)); 
    } 
} 

Der Ausgang eines Testlaufs (in Eclipse, todsichere xml Berichte ähnlich sind), um diese Ausgabe zeigt, fällt der Methodenname ist testApp mit der Objekt-ID der Klasse als einziges Unterscheidungsmerkmal:

Test Results

ich ausgeben will eine benutzerdefinierte Zeichenfolge als entweder die Testmethode Namen oder die Parameter so in Jenkins ich einfach, was Testfall brach sehe die Tests.

Ich habe versucht, einen Anmerkungshörer zu erstellen, der IAnnotationTransformer implementiert, aber wenn ich annotation.setTestName("test") ausgeführt hatte, hatte es keine Auswirkung auf die Ergebnisausgabe.

Wie kann ich das erreichen?

+1

Haben Sie eine 'toString()' impl auf 'data_class' versucht? Abgesehen davon ist 'data_class' nicht der größte Klassenname. Klassennamen in Java werden per Konvention aktiviert und CamelCase. z. B .: 'MyClass' – Taylor

Antwort

1

Fügen Sie toString für Ihre Klassenmethode data_class hinzu.

public String toString(){ 
    return this.name; 
} 
+0

Nicht sicher, warum ich nicht daran gedacht habe, aber es funktioniert für meinen Fall. Vielen Dank! Ich hatte gehofft festzustellen, ob es eine Möglichkeit gibt, beliebige Namen zu setzen. Zum Beispiel, wenn ich zwei Objekte einsende und den Namen basierend auf beiden festlegen muss, oder wenn ich die toString-Methode nicht ändern kann. – Chris

+0

AFAIK kann keine über mehrere Objekte haben, entweder Sie können beide Objekte mit einer einzigen Klasse in diesem Fall umhüllen, sonst haben toString der beiden Klassen zu einem aussagekräftigen Namen und Testng Komma trennen und clupt diese. –