根據cucumber-cpp github repo和cucumber-cpp step definition quick-start guide的說明,我創建了我的黃瓜步驟定義文件。這些功能及其step_definition文件位於features/
文件夾下,cpp代碼使用cucumber-cpp標題構建,並按照指示與libcucumber-cpp.a鏈接。Cucumber-cpp step defiinition runner立即退出
黃瓜步驟定義運動員應該保持運行作爲一個單獨的過程,黃瓜命令應該在跑步者跑步時執行。事實上,cucumber-cpp存儲庫中的例子就是這樣執行的,但是當我使用gtest或boost測試創建自己的步驟定義時,它們立即執行,而不用等待來自黃瓜的調用。
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 完整的跟蹤文件位於自述文件中。
黃瓜文件features/
下,和療法只有一個功能,就是等同於什麼here
轉輪可執行文件在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")
謝謝,最初當我嘗試時,boost鏈接器錯誤使我認爲我做錯了什麼。看起來我沒有鏈接一些增強庫。所以,我所做的是,首先將CUCUMBER_TEST_DEPENDENCIES中的CUCUMBER_BINARIES移動到最上方,其次,我將這些增強目標添加到了configure_boost.cmake,chrono和program_options中。 現在它像一個魅力和正確的主要方法鏈接,確實。 謝謝! 我會提交最新版本,並將其留作未來參考。 – Akaedintov