Ошибка инициализации встроенного компаратора Junit - PullRequest
4 голосов
/ 20 июля 2009

Я создал класс SortedList, в котором есть конструктор, который принимает в качестве аргумента java.util.Comparator.

После запуска юнит-тестов на моей машине (через eclipse 3.3.0) все было в порядке. Однако Хадсон жалуется, потому что говорит, что не может создать экземпляр моего компаратора.

Вот мой простой тест (фрагменты)

public class SortedListTest {

    class strcmp implements Comparator<String>{
        public strcmp(){}

        public int compare(String s1,String s2){
            return s1.compareTo(s2);
        }
    }
    @Test
    public void testAdd(){
        SortedList<String> list = new SortedList<String>(new strcmp());
        }
}

Или альтернативный способ:

public void testAdd(){
        SortedList<String> list = new SortedList<String>(new Comparator<String>(){
            public int compare(String s1,String s2){
                return s1.compareTo(s2);
            }
        });
}

Ошибка Хадсона показывает

ar.com.lib.SortedListTest $ strcmp.initializationError0

Сообщение об ошибке

Тестовый класс должен иметь открытый конструктор с нулевым аргументом

StackTrace

java.lang.Exception: тестовый класс должен иметь открытый конструктор с нулевым аргументом в java.lang.reflect.Constructor.newInstance (Constructor.java:513) в java.lang.reflect.Constructor.newInstance (Constructor.java:513) Вызванный: java.lang.NoSuchMethodException: ar.com.lib.SortedListTest $ зЬгстр. () в java.lang.Class.getConstructor0 (Class.java:2706) в java.lang.Class.getConstructor (Class.java:1657)

Я пытался использовать аннотацию @Ignore, но пока безуспешно. Он не скомпилируется, когда я попробую

@Ignore class strcmp{}

Любые идеи будут оценены. Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 20 июля 2009

Проблема в том, что Hudson видит strcmp в качестве тестового класса, который пытается запустить. Тот факт, что это внутренний класс, не меняет этого. Конфигурацию Гудзона необходимо изменить, чтобы исключить этот класс в качестве тестового класса.

Если вы не можете этого сделать, то сделайте strcmp общедоступным статическим классом с общедоступным конструктором noargs и добавьте в него метод test, который ничего не делает (или тег ignore для класса может работать). Но было бы гораздо лучше, если бы вы могли заставить тестирующего вообще не выбирать этот класс в качестве тестового.

0 голосов
/ 20 июля 2009

java.lang.Exception: тестовый класс должен иметь открытый конструктор с нулевым аргументом в

Хорошо, у вашего класса с @Test есть открытый конструктор с нулевым аргументом? Не могу сказать, правда ли это из того, что вы отправили.

Возможно, вы захотите также дать внутреннему классу модификатор доступности (public, protected и т. Д.) Вместе с его правильным именем (класс должен начинаться с заглавной буквы). Если эти классы вызываются отражением, всегда возможно, что бегун JUnit делает определенные предположения о правилах форматирования и именования ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...