Добавить значения в Java ENUM для тестирования - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь сделать несколько многопоточных тестов, используя JMockit в коде, похожем на этот:

class scratch_1 {
    public static void main(String[] args) {

        for (final Car ex: Car.values()) {
            System.out.println(ex.getValue());
        }
    }
}

enum Car {
    A(1);

    public int getValue() {
        return value;
    }

    private final int value;

    Car(final int value){
        this.value = value;
    }
}

Проблема в том, что для проверки, мой дляцикл должен обрабатывать более одного автомобиля (логика многопоточности происходит внутри).Однако я не могу изменить перечисление, потому что на данный момент у нас есть только 1 машина, но будет больше в следующих источниках.

Как я могу добавить другую машину во время выполнения, только для тестирования?

РЕДАКТИРОВАТЬ:

Это то, что я пытался, что не сработало:

новый автомобиль (2);-> нет новых экземпляров перечислителей

Создайте второй класс SpecialCar с двумя SpecialCars и замените их во время тестов.

Класс SpecialCar расширяется -> перечисления не могут быть расширены

макет метода values ​​() из Car.так что

new Expectations() {
            {
                 car.values();
                 result = {car.A... }

Проблема: больше машин нельзя добавлять в массив.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Вы можете сделать так, чтобы ваш enum реализовывал интерфейс, и имел тестовое перечисление, которое также реализует этот интерфейс, а затем передавал класс соответствующего перечисления в тест.

public interface Vehicle {
    public int getValue();
}

public enum Car implements Vehicle {
    A(1);

    public int getValue() {
        return value;
    }

    private final int value;

    Car(final int value){
        this.value = value;
    }
}

public enum TestCar implements Vehicle {
    A(1), B(2);

    public int getValue() {
        return value;
    }

    private final int value;

    Car(final int value){
        this.value = value;
    }
}

public void test(Class<? extends Vehicle> clazz) {
    for (final Vehicle vehicle : clazz.getEnumConstants()) {
        System.out.println(vehicle.getValue());
    }
}
0 голосов
/ 19 октября 2018

Есть Car.values().Поэтому либо дождитесь написания модульного теста, либо:

Добавьте второе значение Car, запишите модульные тесты, основанные на values(), независимо от конкретной константы.Удалите второе значение Car и зарегистрируйте олл-ин в системе контроля версий.

Некоторые тесты могут быть сняты с охраны из-за того, что это всего лишь одно значение, и, возможно, даже потребуется проверка на if (Car.values().length != 0).

...