2017-01-01 1 views
1

cucumber-cpp github repocucumber-cpp step definition quick-start guide에 제공된 지침에 따라 필자는 오이 단계 정의 파일을 만들었습니다. 기능 및 해당 step_definition 파일은 features/ 폴더 아래에 있으며 cpp 코드는 cucumber-cpp 헤더로 작성되고 지침에 따라 libcucumber-cpp.a에 링크됩니다.Cucumber-cpp step definition runner 즉시 종료

오이 단계 정의 러너는 별도의 프로세스로 실행되어야하며 러너가 실행되는 동안 오이 명령을 실행해야합니다. 실제로 오이 - 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$ 

즉시 실행하는 대신 아무 것도 말해서 오이를 기다려야합니다. 오이 - cpp의 예제 코드를 내 프로젝트에 복사하여 붙여 넣었고 즉시 종료합니다. 그래서 cucumber-cpp의 예제와 광산의 소스 코드 차이는 없지만, 그들은 다르게 행동합니다. cmake 빌드 스크립트가 다른 라이브러리와 연결될 수 있다고 생각했지만 연결 프로세스는 정확히 동일합니다.

왜 이런 일이 일어날 지 아무도 모르는 사람이 있습니까?

여기에 내가 가진 오류를 재현하는 최소 코드가있는 저장소가 있습니다. https://github.com/onatbas/CucumberCppTest 전체 추적은 추가 정보입니다.

오이 파일은 features/ 받고, 아플리케는 주자 실행 파일이 빠른 참조를 위해 tests/CMakeLists.txt


에 정의되어 here

무엇이 동일의 하나 개의 특징입니다 : 다음 단계 정의 파일 입니다 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)은 컴파일 된 오이 - cpp 라이브러리의 일부로 포함되어 있습니다.

다른 모든 전에 CUCUMBERTEST_TEST_DEPENDENCIES${CUCUMBER_BINARIES} 이동, 또는 주요 방법이 포함되지 않은 라이브러리 테스트에 연결하십시오 (두 라이브러리, 예를 들어 GoogleTest 배송 : 하나의 메인 방법이없는 하나).

+0

처음에 시도해봤을 때 부스터 링커 오류로 인해 뭔가 잘못하고 있다고 생각하게되었습니다. 그것은 내가 몇 가지 부스트 라이브러리와 연결하지 않은 것 같습니다. 그래서, 내가 한 일은 CUCUMBER_TEST_DEPENDENCIES에서 CUCUMBER_BINARIES를 맨 처음으로 옮겼습니다. 두 번째로, 다른 것들과 함께 configure_boost.cmake, chrono 및 program_options에 이러한 부스트 목표를 추가했습니다. 이제 매력처럼 작동하고 올바른 기본 방법이 실제로 링크되어 있습니다. 감사합니다. 최신 버전을 커밋하고 나중에 참조 할 수 있도록 남겨 두겠습니다. – Akaedintov

관련 문제