我们目前正在尝试在Spring-MVC中实现Togglz库。
我们目前通过以下方式管理来自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
中的切换默认为禁用,并从我们的UI或此MyFeatures.java
文件中打开/关闭。但是......我们在测试中的切换默认为启用并使用以下任一行打开/关闭:
@Rule
public TogglzRule togglzRule = TogglzRule.allDisabled(MyFeatures.class);
或在每次测试中单独进行。
这至少有两个地方我们必须切换我们的功能,如果我们有更多的测试使用这些功能可能更多,所以我的问题是:
是否可以从一个地方控制所有Togglz功能切换,无论它们是在代码还是测试中?
答案 0 :(得分:1)
这里的问题是我们在MyFeature.java中的切换默认为禁用,并从我们的UI或此MyFeatures.java文件中打开/关闭。
更改此文件或UI中的功能状态会影响生产环境中的应用程序行为(从而影响可能的用户)。
但是......我们在测试中的切换默认为启用并使用以下任一行打开/关闭:
更改测试中的功能状态会影响测试下的应用程序行为。
这至少有两个地方我们必须切断我们的功能,如果我们有更多的测试使用这些功能可能更多
你所问的是有争议的,因为如果存在这种可能性,它将影响两种环境(测试和生产)。这一事实将导致以下结果:
因此,为了这个目的存在这种分离,并且从2个不同的地方管理功能状态实际上是一个功能而不是错误。
我听说过另一个想法,在大多数情况下,你不应该在禁用功能时测试这些情况,因为这种状态应该是暂时的,并且不值得为所有可能的情况进行测试。