Cucumber-cpp步骤定义跑步者立即退出

时间:2017-01-01 15:37:42

标签: boost cmake cucumber googletest cucumber-cpp

根据cucumber-cpp github repocucumber-cpp step definition quick-start guide给出的说明,我创建了黄瓜步骤定义文件。功能及其step_definition文件位于features/文件夹下,cpp代码使用cucumber-cpp标头构建,并按照指示链接到libcucumber-cpp.a。

黄瓜步骤定义运行器应该作为单独的进程保持运行,并且黄瓜命令应该在运行器运行时执行。实际上,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")

1 个答案:

答案 0 :(得分:2)

您的示例输出

Running main() from gtest_main.cc

该主要方法将运行测试运行者的默认行为而不是Cucumber-CPP。您想要的主要方法(src/main.cpp)包含在已编译的cucumber-cpp库中。

尝试在${CUCUMBER_BINARIES}之前移动CUCUMBERTEST_TEST_DEPENDENCIES,或者链接到不包含main方法的测试库(例如,GoogleTest附带两个库:一个带有一个库,一个没有主要方法)。