2011-11-16 18 views
5

Kiedy CodePro automatycznie generuje testy dla moich metod, to często generuje identyczne testy:Dlaczego program google CodePro generuje identyczne testy JUnit?

/** 
* Run the String getCategoryID() method test. 
* 
* @throws Exception 
* 
* @generatedBy CodePro at 17/11/11 11:44 AM 
*/ 
@Test 
public void testGetCategoryID_1() 
    throws Exception { 
    Category fixture = new Category(""); 

    String result = fixture.getCategoryID(); 

    // add additional test code here 
    // An unexpected exception was thrown in user code while executing this test: 
    // java.lang.NullPointerException 
    //  at java.io.StringReader.<init>(StringReader.java:33) 
    //  at xpath.XPathRunner.<init>(XPathRunner.java:23) 
    //  at trademefacade.Category.retrieveCategoryID(Category.java:95) 
    //  at trademefacade.Category.getCategoryID(Category.java:68) 
    assertNotNull(result); 
} 

/** 
* Run the String getCategoryID() method test. 
* 
* @throws Exception 
* 
* @generatedBy CodePro at 17/11/11 11:44 AM 
*/ 
@Test 
public void testGetCategoryID_2() 
    throws Exception { 
    Category fixture = new Category(""); 

    String result = fixture.getCategoryID(); 

    // add additional test code here 
    // An unexpected exception was thrown in user code while executing this test: 
    // java.lang.NullPointerException 
    //  at java.io.StringReader.<init>(StringReader.java:33) 
    //  at xpath.XPathRunner.<init>(XPathRunner.java:23) 
    //  at trademefacade.Category.retrieveCategoryID(Category.java:95) 
    //  at trademefacade.Category.getCategoryID(Category.java:68) 
    assertNotNull(result); 
} 

Są to testy dla następującej metody:

public String getCategoryID() throws IOException, 
     NoCategoryMatchException { 
    categoryID = retrieveCategoryID(); 
    if (categoryID.equals("")) { 
     throw new NoCategoryMatchException(); 
    } 
    return categoryID; 
} 

używam CodePro źle? Wydaje mi się, że testy wielokrotne były dla mnie wskazówką do wdrożenia dwóch testów, ale za każdym razem, gdy dostosowuję testy, są one po prostu przepisywane, gdy CodePro ponownie generuje testy.

+0

Czy możesz opublikować kod, dla którego są to testy? –

+0

Przepraszam za opóźnienie, gotowe. – Kevin

Odpowiedz

2

nie wiem CodePro dobrze, ale patrząc na JUnit Test Case Generation - Execution:

W celu określenia oczekiwanego rezultatu sposobu docelowej, uruchamia generator kodu że metody. Preferencje CodePro> JUnit> Test Exitution kontrolują odpowiedź generatora kodu, gdy wykonanie metody zgłasza wyjątek.

To wygląda kodu jest aktualnie wykonywany przez CodePro ale rzuca NullPointerException, prawdopodobnie dlatego, że konfiguracja nie jest wykonane prawidłowo?

Program CodePro generuje dwa przypadki testowe, ponieważ kod zawiera dwie ścieżki, ale wyjątek NullPointerException oznacza, że ​​inny kod testowy nie jest generowany.

Nie w pełni rozumiem wszystkie związane z tym mechanizmy, ale spróbuj zastąpić metodę retrieveCategoryId() metodą, która po prostu zwraca "" i regeneruje test. Jeśli to działa, to jest problem. Nie wiedziałbym jednak, jakie jest to rozwiązanie. Wypróbuj fora dla google codepro.

0

Jeśli chcesz dostosować testy i zapobiec ich przepisywaniu, usuń znacznik @generatedBy. Jest to wskazówka dla generatora kodu, że jest właścicielem tej metody i może ją przepisać w razie potrzeby.

0

Dobrze jest mieć więcej niż jedną metodę testowania, aby przetestować jedną ze swoich metod. GooglePro próbuje wygenerować różne wartości dla argumentów metody, a następnie tworzy metodę testową z kombinacjami tych wartości.

Możesz (automatycznie) generować klasy fabryczne, aby pomóc GooglePro uzyskać te wartości. W twoim przypadku, jeśli go nie znajdzie, zapełnia metody "" wartościami dla łańcuchów i nowej kategorii (""), ponieważ nie używasz klasy fabrycznej.

Można ograniczyć liczbę metod badań na metody w oknie> Preferencje> codePro> Junit> Metody> Generowanie najwyżej

Jest bardziej szczegółowej informacji tutaj. JUnit Test Case Generation

Powiązane problemy