根据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