2010-11-24 3 views
1

Мне нужно проверить один из моих абстрактных классов, который реализует один из интерфейсов. Абстрактный класс имеет конструктор с аргументами. Я использую Mockito в качестве основы тестирования. Итак, если мне нужно вызвать методы в абстрактном классе, какой должен быть лучший метод?Тестирование абстрактного класса с конструктором с аргументами

Если я пытаюсь подклассифицировать абстрактный класс, он просит реализовать конструктор аргументов и не позволяет писать конструктор no-arg. Также, если я попытаюсь высмеять класс без конструктора no-arg и поместил sysouts в методы, как правило, я не могу их вызвать (если для издевающегося класса нужен обязательный конструктор no-arg?), Хотя нет ошибки junit.

Пожалуйста, помогите. Заранее спасибо.

+0

- защищен конструктор аргументов абстрактного класса? также я предполагаю, что вы вызываете параметризованный супер из подкласса, иначе вы получите ошибку времени компиляции. Не могли бы вы опубликовать код? как показано @Ralph лучшим способом является реализация конкретного подкласса и, как правило, его конечный потомок, который вы реализуете, если у вас есть несколько абстрактных классов в иерархии. Который также не является доказательством ошибок, поскольку вы исходите из предположения, что ни один из абстрактных классов не имеет переопределенного метода от родителя. В этом случае вам нужно проверить как родительский, так и переопределенный метод. – pmu 2010-11-24 07:44:28

ответ

2

Одним из способов тестирования абстрактных классов является реализация подкласса concreate, только для тестирования.

Если абстрактный класс имеет только construtor аргументы вы могли бы сделать разные вещи:

  • передача нуль на свои аргументы
  • пасс издевались объектов к аргументам
  • пасс конкретных объектов к аргументам

, который вы выбираете, зависит от вашего тестового примера и реализации абстрактного класса. - Конечно, вы могли бы смешивать способы.

Пример:

abstract class A{ 
    A(Object o) { 
    } 
} 

class TheNullWay extends A { 
    TheNullWay() { 
    super(null); 
    } 
} 

class TheMockedWay extends A { 
    TheMockedWay(Object o){ 
    super(o); 
    } 
} 

new TheMockedWay(createMockedObject()); 

BTW: это полная другая вещь, чтобы проверить класс, который использует абстрактный класс.