Управляйте Togglz из одного места

В настоящее время мы пытаемся реализовать библиотеку Togglz в Spring-MVC.

В настоящее время мы управляем переключателями в нашем коде с нашего MyFeatures.java файл следующим образом:

import org.togglz.core.Feature;
import org.togglz.core.annotation.EnabledByDefault;
import org.togglz.core.annotation.Label;
import org.togglz.core.context.FeatureContext;

public enum MyFeatures implements Feature {

    @Label("A Feature")
    MY_FEATURE;

    public boolean isActive() {
    return FeatureContext.getFeatureManager().isActive(this);
    }
}

а затем в наших реальных классах с:

if (MyFeatures.MY_FEATURE.isActive()) {
    // some code...
}

Это хорошо работает, но у нас есть недостаток в наших тестах, где мы делаем следующее:

@Rule
public TogglzRule togglzRule = TogglzRule.allDisabled(MyFeatures.class);

// some tests, then:

    if (MyFeatures.MY_FEATURE.isActive()) {
        // some feature dependent test...
    }

Проблема здесь в том, что наши переключатели в MyFeature.java по умолчанию отключено и включается / выключается либо из нашего пользовательского интерфейса, либо внутри MyFeatures.java файл. НО... наши переключатели в тестах по умолчанию включены и включаются / выключаются любой строкой:

@Rule
    public TogglzRule togglzRule = TogglzRule.allDisabled(MyFeatures.class);

или индивидуально в каждом тесте.

Это как минимум два места, где мы должны отключить наши функции, возможно, больше, если у нас будет больше тестов с использованием этих функций, поэтому мой вопрос:

Можно ли управлять всеми переключателями функций Togglz из одного места, независимо от того, находятся ли они в коде или тестах?

1 ответ

Проблема здесь в том, что наши переключатели в MyFeature.java по умолчанию отключены и включаются / выключаются либо из нашего пользовательского интерфейса, либо в этом файле MyFeatures.java.

Изменение состояния функций в этом файле или из пользовательского интерфейса влияет на поведение приложения в производственной среде (и, следовательно, на возможных пользователей).

НО... наши переключатели в тестах по умолчанию включены и включаются / выключаются любой строкой:

Изменение состояния функций в тестах влияет на поведение приложения в тестах.

Это как минимум два места, где мы должны отключить наши функции, возможно, больше, если у нас будет больше тестов с использованием этих функций

То, что вы спрашиваете, является спорным, потому что, если такая возможность существует, это повлияет на обе среды (тестирование и производство). Этот факт приведет к следующему:

  • когда вы отключаете какую-либо функцию, тесты начинают проваливаться, потому что они полагаются на эту функцию и пытаются ее протестировать
  • затем вы включаете эту функцию, тесты проходят, но теперь есть вероятность, что пользователи увидят функцию, которая еще не готова

Таким образом, это разделение существует для цели, и управление состоянием функций из двух разных мест на самом деле является функцией, а не ошибкой.

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

Другие вопросы по тегам