2017-01-01 91 views
1

根據cucumber-cpp github repocucumber-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") 

回答

2

你的榜樣輸出

Running main() from gtest_main.cc 

這主要方法將運行測試運行的默認行爲,而不是黃瓜-CPP的。您想要的主要方法(src/main.cpp)作爲編譯的cucumber-cpp庫的一部分。

嘗試在CUCUMBERTEST_TEST_DEPENDENCIES之前移動${CUCUMBER_BINARIES},或鏈接到不包含主要方法的測試庫(例如,GoogleTest附帶兩個庫:一個帶有而另一個沒有主要方法)。

+0

謝謝,最初當我嘗試時,boost鏈接器錯誤使我認爲我做錯了什麼。看起來我沒有鏈接一些增強庫。所以,我所做的是,首先將CUCUMBER_TEST_DEPENDENCIES中的CUCUMBER_BINARIES移動到最上方,其次,我將這些增強目標添加到了configure_boost.cmake,chrono和program_options中。 現在它像一個魅力和正確的主要方法鏈接,確實。 謝謝! 我會提交最新版本,並將其留作未來參考。 – Akaedintov