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