Почему Google CodePro генерирует идентичные тесты JUnit? - PullRequest
5 голосов
/ 17 ноября 2011

Когда CodePro автоматически генерирует тесты для моих методов, он часто генерирует идентичные тесты:

/**
 * 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);
}

Это тесты для следующего метода:

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

Я неправильно использую CodePro?Я думал, что несколько тестов были подсказками для реализации двух тестов, но всякий раз, когда я настраиваю тесты, они просто переписываются, когда CodePro регенерирует тесты.

Ответы [ 3 ]

2 голосов
/ 17 ноября 2011

Я плохо знаю CodePro, но, глядя на генерацию тестового примера JUnit - Выполнение :

Чтобы определить ожидаемый результат целевого метода,генератор кода выполняет этот метод.Предпочтения CodePro> JUnit> Test Execution управляют реакцией генератора кода, когда выполнение метода вызывает исключение.

Это выглядит как ваш код выполняется CodePro, но онгенерирует исключение NullPointerException, возможно, из-за того, что установка не выполняется правильно?

CodePro генерирует два тестовых случая, потому что код имеет два пути через него, но исключение NullPointerException означает, что не генерируется другой тестовый код.

Я не полностью понимаю все задействованные механизмы, но попробуйте заменить retrieveCategoryId () методом, который просто возвращает "", и заново создайте тест.Если это работает, то это проблема.Я не знаю, что решение, хотя.Попробуй на форумах гугл кодпро.

0 голосов
/ 21 декабря 2012

Можно иметь более одного метода тестирования для тестирования одного из ваших методов. GooglePro пытается сгенерировать разные значения для аргументов вашего метода, а затем создает тестовый метод с комбинациями этих значений.

Вы можете (автоматически) создавать фабричные классы, чтобы помочь GooglePro получить эти значения. В вашем случае, если он не находит ни одного, он заполняет методы "" значениями для строк и новой категории (""), потому что вы не используете фабричный класс.

Вы можете ограничить количество методов тестирования для каждого метода в окне> настройки> codePro> Junit> Methods> Generate не более

Более подробная информация здесь. Генерация тестового набора JUnit

0 голосов
/ 18 ноября 2011

Если вы хотите настроить свои тесты и предотвратить их перезапись, удалите тег @generatedBy. Это подсказка генератору кода, что он владеет этим методом и может переписать его при необходимости.

...