首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从单一位置控制Togglz

从单一位置控制Togglz
EN

Stack Overflow用户
提问于 2017-02-16 19:36:06
回答 1查看 311关注 0票数 1

我们目前正在尝试在Spring-MVC中实现Togglz库。

目前,我们通过以下方式从MyFeatures.java文件中管理代码中的切换:

代码语言:javascript
复制
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);
    }
}

然后在我们的实际类中:

代码语言:javascript
复制
if (MyFeatures.MY_FEATURE.isActive()) {
    // some code...
}

这工作得很好,但我们在测试中有一个缺陷,我们做了以下工作:

代码语言:javascript
复制
@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文件中打开/关闭。但是..。我们在测试中的切换默认情况下是启用的,并使用以下两行之一打开/关闭:

代码语言:javascript
复制
@Rule
    public TogglzRule togglzRule = TogglzRule.allDisabled(MyFeatures.class);

或在每项测试中单独执行。

这至少有两个地方我们必须关闭我们的功能,如果我们有更多的测试使用这些功能,可能会更多,所以我的问题是:

有没有可能从一个地方控制所有的Togglz特性切换,不管它们是在代码中还是在测试中?

EN

回答 1

Stack Overflow用户

发布于 2017-02-17 00:07:21

这里的问题是,我们在MyFeature.java中的切换默认为禁用,并从我们的UI或此MyFeatures.java文件中切换开/关。

更改此文件中的功能状态或更改UI中的功能状态会影响生产环境中的应用程序行为(从而影响可能的用户)。

但是...我们在测试中的切换默认情况下是启用的,并使用以下两行之一打开/关闭:

更改测试中的功能状态会影响测试下的应用程序行为。

这至少有两个地方我们必须关闭我们的功能,如果我们有更多的测试使用这些功能,可能会更多

您的问题是有争议的,因为如果存在这种可能性,它将影响两个环境(测试和生产)。这一事实将导致以下结果:

  • 当您禁用某些功能时,测试开始失败,因为他们依赖于此功能并尝试对其进行测试
  • 然后您启用了此功能,测试正在通过,但现在用户可能会看到尚未准备就绪的功能

因此,这种分离的存在是为了达到这个目的,从两个不同的地方管理功能状态实际上是一个功能,而不是一个bug。

我听说的另一个想法是,在大多数情况下,当特性被禁用时,你不应该测试用例,因为这种状态应该是暂时的,不值得花费精力维护所有可能的用例的测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42272833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档