web-dev-qa-db-ja.com

Spring Boot / Cucumber Integration - ステップ定義クラス内の@Autowired(または他のSBタグ)の使用方法

SpringBoot、Cucumber、Junit4 Automationフレームワークを作成しようとしています。以下のように使用したバージョン:

  • SpringBoot:2.1.3
  • キュウリ:io.cucumber 4.2.3
  • JUNIT4:4.12
  • オペレーティングシステム:Win7 Pro。

プロパティファイル(.yml)からプロパティを取得しようとしているプロップクラスを作成しました

プロップクラス:

@Data
@Component
public class PropsConfig {
    @Value("${spring.skyewss}")
    public String url;
}
 _

ステップDEF:

public class SkyeWssLoginStepDef implements En {

    private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());

    private WebDriver driver;
    private SkyeWssLoginPage loginPage;
    private SkyeWssUtil skyeWssUtil;
    @Autowired
    private PropsConfig propsConfig;

    public SkyeWssLoginStepDef() {


        Given("^I open Skye WSS web page$", () -> {
            driver = CukeHook.driver;
            loginPage = new SkyeWssLoginPage(driver);
            driver.get(propsConfig.getUrl());
            skyeWssUtil = new SkyeWssUtil();
            LOGGER.info("Current page is " + driver.getTitle());
        });
       }
       ......
     }
 _

キュウリランナークラス:

@RunWith(Cucumber.class)
@CucumberOptions(
        features = {"src/test/resources/features"},
        plugin = {"pretty", "html:target/cucumber-html-report"},
        tags = {"@SkyeWss"}
)
@SpringBootTest
public class WssRegApplicationTests {

}
 _

私はStepDefクラスにタグを与えようとしましたが、運がありません。 @Componentまたは@SrpingBoottestのようなStepDefクラスタグを与えると、エラーが発生します。

cucumber.runtime.cucumberexception:Glueクラスクラスcom.flexicards.wss_reg.skye.step.skyewssloginStepDefとクラスcom.flexicards.wss_reg.skye.step.skyewssDashboardValstepDef Springコンテキストを設定しようとしました。春のコンテキストを1つだけ設定してください。


cucumber.runtime.cucumberexception:Glueクラスcom.flexicards.wss_reg.skye.step.skyewssdashboardValstepDefが@componentで注釈を付けました。春の自動検出の候補としてそれをマーキングする。グルークラスはキュウリによって検出され登録されます。 Springによる接着剤クラスの自動検出は、Bean定義が複製される可能性があります。 @Component Annotationを削除してください

私は春とSpringbootに新しい、どこかに正しく構成されていないことを確信しています。スプリングボットとキュウリのほとんどの例が古くなっています。私はすでに試しました。すべてのStepDefクラスによって拡張された抽象クラスを作成します。これにより、@SpringBoottest 1と同じエラーが表示されます。

誰もがこれを助けてくれることができますか?どんな入力も歓迎されています。どうもありがとうございます。

5
Shi Tim

あなたがほとんどすべてをうまくやったようです。場所から外の唯一のものはあなたのコンテキスト構成の場所です。ステップまたはフック定義のファイルに入る必要があります。そうでなければキュウリはそれを検出しません。これはトリックをするべきです:

_@SpringBootTest
@AutoConfigureMockMvc
public class CucumberContextConfiguration  {

    @Before
    public void setup_cucumber_spring_context(){
        // Dummy method so cucumber will recognize this class as glue
        // and use its context configuration.
    }
} 
_

cucumber githubリポジトリ に_cucumber-spring_の動作例を見つけることができます。

あなたが予想されるかもしれないように、キュウリがスプリングビーンとしてのステップ定義を実装することを念頭に置いておくべきであることにも留意する価値があります。つまり、_@MockBean_、_@SpyBean_、友達が機能しません。

3
M.P. Korstanje