Управляйте 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.
Изменение состояния функций в этом файле или из пользовательского интерфейса влияет на поведение приложения в производственной среде (и, следовательно, на возможных пользователей).
НО... наши переключатели в тестах по умолчанию включены и включаются / выключаются любой строкой:
Изменение состояния функций в тестах влияет на поведение приложения в тестах.
Это как минимум два места, где мы должны отключить наши функции, возможно, больше, если у нас будет больше тестов с использованием этих функций
То, что вы спрашиваете, является спорным, потому что, если такая возможность существует, это повлияет на обе среды (тестирование и производство). Этот факт приведет к следующему:
- когда вы отключаете какую-либо функцию, тесты начинают проваливаться, потому что они полагаются на эту функцию и пытаются ее протестировать
- затем вы включаете эту функцию, тесты проходят, но теперь есть вероятность, что пользователи увидят функцию, которая еще не готова
Таким образом, это разделение существует для цели, и управление состоянием функций из двух разных мест на самом деле является функцией, а не ошибкой.
Еще одна идея, о которой я слышал, что в большинстве случаев вам не следует тестировать случаи, когда функция отключена, потому что такое состояние должно быть временным и не требует усилий для поддержания тестов во всех возможных случаях.