【问题标题】:Avoid switch statement in Jbehave steps避免在 Jbehave 步骤中使用 switch 语句
【发布时间】:2019-04-09 17:03:13
【问题描述】:

我正在处理 jbehave 场景。我的步骤使用 switch 语句。 可能有很多这样的标签。 这意味着每次我必须添加另一个案例语句。

如何用 OOP 替换 switch 语句?

现在我通过枚举来区分选项卡,因为只能从 jbehave 接收字符串。

但我相信还有更优雅的方式。

当我在编辑器中打开出版物并转到“受众”选项卡时

@When("I open publication in Editor and go to $tab tab")
public void openEditorAndGoToTab(String tab){

    TaggingUiTabs enumTab = EnumTextMatcher.matchEnum(tab, 
    TaggingUiTabs.getAllTabs());

    editorWindow.goToTaggingUi();
    switch (enumTab){
        case AUDIENCE:
            taggingUi.goToAudienceTab();
            break;
    }
}

【问题讨论】:

  • 简单的答案是让每个不同的案例成为一个类,该类使用goToTab 之类的方法实现接口,然后您只需调用类方法而不是手动分派。不过,如果没有更多背景信息,如果您能够获得更深入的建议,请不吝赐教。
  • JBhehave 可以自动将输入参数转换为任何 Enum 类型

标签: java oop switch-statement jbehave


【解决方案1】:

我有时会使用地图来避免很长的切换,例如像这样:

private final Map<TaggingUiTabs, Runnable> actionMap;

public MyStepsClass() {
   actionMap.put(TaggingUiTabs.AUDIENCE, () -> taggingUi.goToAudienceTab());
   actionMap.put(TaggingUiTabs.OTHER_TAB, () -> taggingUi.goToOtherTab());
}

@When("I open publication in Editor and go to $tab tab")
public void openEditorAndGoToTab(String tab){

    TaggingUiTabs enumTab = EnumTextMatcher.matchEnum(tab, 
    TaggingUiTabs.getAllTabs());

    editorWindow.goToTaggingUi();
    actionMap.get(enumTab).run();
}

这样我可以轻松添加更多操作。当我无法将其余代码重新设计为更加面向对象时,我发现它非常有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多