Если вам все равно нужно решение (например, из-за того, что у вас слишком много реализаций абстрактного класса, и тестирование всегда будет повторять одни и те же процедуры), вы можете создать класс абстрактного теста с методом абстрактной фабрики, который будет вызываться реализация этого тестового класса. Этот пример работает или у меня с TestNG:
Абстрактный тестовый класс Car
:
abstract class CarTest {
// the factory method
abstract Car createCar(int speed, int fuel);
// all test methods need to make use of the factory method to create the instance of a car
@Test
public void testGetSpeed() {
Car car = createCar(33, 44);
assertEquals(car.getSpeed(), 33);
...
Реализация Car
class ElectricCar extends Car {
private final int batteryCapacity;
public ElectricCar(int speed, int fuel, int batteryCapacity) {
super(speed, fuel);
this.batteryCapacity = batteryCapacity;
}
...
Юнит-тестовый класс ElectricCarTest
Класса ElectricCar
:
class ElectricCarTest extends CarTest {
// implementation of the abstract factory method
Car createCar(int speed, int fuel) {
return new ElectricCar(speed, fuel, 0);
}
// here you cann add specific test methods
...