1

我们目前正在尝试在 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...
    }

这里的问题是我们的切换默认为禁用,并且可以从我们的 UI 或此文件中MyFeature.java打开/关闭。MyFeatures.java但是......我们在测试中的切换默认为启用并使用以下任一行打开/关闭:

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

或单独在每个测试中。

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

是否可以从一个地方控制所有 Togglz 功能切换,无论它们是在代码中还是在测试中?

4

1 回答 1

1

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

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

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

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

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

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

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

所以这种分离是为了目的而存在的,从两个不同的地方管理功能状态实际上是一个功能而不是一个错误。

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

于 2017-02-16T16:07:21.097 回答