cucumber-cpp github repoおよびcucumber-cpp step definition quick-start guideに記載されている指示に基づいて、cucumber ステップ定義ファイルを作成しました。機能とその step_definition ファイルはfeatures/
フォルダーの下にあり、cpp コードは cucumber-cpp ヘッダーでビルドされ、指示に従って libcucumber-cpp.a にリンクされています。
Cucumber のステップ定義ランナーは別のプロセスとして実行し続け、ランナーの実行中に cucumber コマンドを実行する必要があります。実際、cucumber-cpp リポジトリのサンプルはそのように実行されますが、gtest または boost テストを使用して独自のステップ定義を作成すると、cucumber からの呼び出しを待たずにすぐに実行されます。
Onats-MacBook-Pro:bin onatbas$ ./tests/AdditionTest_TESTTARGET
Running main() from gtest_main.cc
[==========] Running 0 tests from 0 test cases.
[==========] 0 tests from 0 test cases ran. (0 ms total)
[ PASSED ] 0 tests.
Onats-MacBook-Pro:bin onatbas$
すぐに実行するのではなく、何も言わずにキュウリの呼び出しを待つ必要があります。cucumber-cpp のサンプル コードをプロジェクトにコピー アンド ペーストしたところ、それらもすぐに終了しました。そのため、cucumber-cpp の例と私の例の間にソース コードの違いはありませんが、動作が異なります。cmake ビルド スクリプトが別のライブラリとリンクしているのではないかと疑っていましたが、リンク プロセスもまったく同じです。
なぜこれが起こっているのか、誰にも分かりますか?
これは、私が持っているエラーを再現する最小限のコードを含むリポジトリです。https://github.com/onatbas/CucumberCppTest 完全なトレースは readme にあります。
きゅうりファイルは の下にあり、ここfeatures/
にあるものと同一の機能は 1 つだけです。
ランナー実行可能ファイルはで定義されていますtests/CMakeLists.txt
クイック リファレンス: ステップ定義ファイル AdditionTest.cxx は次のとおりです。
#include <boost/test/unit_test.hpp>
#include <cucumber-cpp/defs.hpp>
#include <CucumberApp.hxx>
using cucumber::ScenarioScope;
struct CalcCtx {
Calculator calc;
double result;
};
GIVEN("^I have entered (\\d+) into the calculator$") {
REGEX_PARAM(double, n);
ScenarioScope<CalcCtx> context;
context->calc.push(n);
}
WHEN("^I press add") {
ScenarioScope<CalcCtx> context;
context->result = context->calc.add();
}
WHEN("^I press divide") {
ScenarioScope<CalcCtx> context;
context->result = context->calc.divide();
}
THEN("^the result should be (.*) on the screen$") {
REGEX_PARAM(double, expected);
ScenarioScope<CalcCtx> context;
BOOST_CHECK_EQUAL(expected, context->result);
}
実行可能ファイルが追加される tests/CMakeLists.txt ファイルは次のとおりです。
cmake_minimum_required(VERSION 3.1)
find_package(Threads)
set(CUCUMBERTEST_TEST_DEPENDENCIES cucumberTest
${CMAKE_THREAD_LIBS_INIT}
${GTEST_BOTH_LIBRARIES}
${GMOCK_BOTH_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
${Boost_LIBRARIES}
${CUCUMBER_BINARIES}
)
macro(ADD_NEW_CUCUMBER_TEST TEST_SOURCE FOLDER_NAME)
set (TARGET_NAME ${TEST_SOURCE}_TESTTARGET)
add_executable(${TARGET_NAME} ${CMAKE_SOURCE_DIR}/features/step_definitions/${TEST_SOURCE})
target_link_libraries(${TARGET_NAME} ${CUCUMBERTEST_TEST_DEPENDENCIES})
add_test(NAME ${TEST_SOURCE} COMMAND ${TARGET_NAME})
set_property(TARGET ${TARGET_NAME} PROPERTY FOLDER ${FOLDER_NAME})
endmacro()
ADD_NEW_CUCUMBER_TEST(AdditionTest "cucumberTest_tests")