Протестируйте абстрактный класс, имеющий конструктор с аргументами - PullRequest
1 голос
/ 24 ноября 2010

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

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

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

1 Ответ

2 голосов
/ 24 ноября 2010

Один из способов проверки абстрактных классов - реализовать его конкретный подкласс, только для тестирования.

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

  • передать null своим аргументам
  • передать mocked-объекты своим аргументам
  • передать конкретные объекты своим аргументам

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

Пример:

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());

Кстати: тестировать класс, использующий абстрактный класс, совершенно иначе.

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