[CMake] CMake and CTest for Google tests
Neelima Mehdiratta
nmehdiratta at decarta.com
Thu Aug 26 18:29:36 EDT 2010
Hi Fraser,
That's a great suggestion! Thank you for the script. It appears that
CMake has support for GTESTS in CMake 2.8.2 which uses a macro, very
similar to yours.
http://public.kitware.com/cgibin/viewcvs.cgi/Modules/FindGTest.cmake?rev
ision=1.4&root=CMake&view=markup
Thanks again!
Neelima
________________________________
From: Fraser Hutchison [mailto:fraser.hutchison at googlemail.com]
Sent: Thursday, August 26, 2010 2:28 AM
To: Neelima Mehdiratta
Cc: cmake at cmake.org
Subject: Re: [CMake] CMake and CTest for Google tests
Hi Neelima,
If you're building the test executable(s) using CMake already and
assuming you have a variable like ${GTEST_SOURCE_FILES} which is a list
of all your test source files, you could probably get away without using
a script to generate a list of names by doing something like:
FOREACH(GTEST_SOURCE_FILE ${GTEST_SOURCE_FILES})
FILE(STRINGS ${GTEST_SOURCE_FILE} GTEST_NAMES REGEX ^TEST)
FOREACH(GTEST_NAME ${GTEST_NAMES})
STRING(REGEX REPLACE ["\) \(,"] ";" GTEST_NAME ${GTEST_NAME})
LIST(GET GTEST_NAME 1 GTEST_GROUP_NAME)
LIST(GET GTEST_NAME 3 GTEST_NAME)
ADD_TEST(${GTEST_GROUP_NAME}.${GTEST_NAME}
${EXECUTABLE_OUTPUT_PATH}/${BIN_NAME}
--gtest_filter=${GTEST_GROUP_NAME}.${GTEST_NAME})
ENDFOREACH()
ENDFOREACH()
This relies on the tests each being defined by the Gtest macro TEST(test
fixture, test name) or TEST_F(test fixture, test name) in the source
files, but it would avoid the need to have the test executable built
before running the ADD_TEST command.
Cheers,
Fraser.
On 25/08/2010 11:17 PM, Neelima Mehdiratta wrote:
I am using Google Tests to create unit tests for our software. We are
using CMake (version 4.6-patch 2) for building the unit tests
executable. Since the list of unit tests is expected to grow to
thousands of tests, I am looking for a way to automate creating a file
(say testlist) on the fly that will contain the list of all our unit
tests specified using the CTest ADD_TEST command. My thought was to use
INCLUDE(testlist) to read in the list of tests at the appropriate point
in the CMakeLists.txt file(i.e, just after calling ENABLE_TESTING().
I have a shell (bash) script (addtestscrpt) that needs to run the unit
tests executable to get the list of all unit tests and then put ADD_TEST
for each of those tests into a file which would look like this:
ADD_TEST(DDSCfgTest.ctr ${EXECUTABLE_OUTPUT_PATH}/${BIN_NAME}
--gtest_filter=DDSCfgTest.ctr)
ADD_TEST(DDSCfgTest.ReadBool ${EXECUTABLE_OUTPUT_PATH}/${BIN_NAME}
--gtest_filter=DDSCfgTest.ReadBool)
ADD_TEST(DDSCfgTest.ReadInt ${EXECUTABLE_OUTPUT_PATH}/${BIN_NAME}
--gtest_filter=DDSCfgTest.ReadInt)
The problem that I'm having is that I need the unit tests executable to
generate the list of all tests and then INCLUDE the list in a
CMakeList.txt file after the unit tests executable is built.
I tried using ADD_CUSTOM_COMMAND with POST_BUILD to run my shell script
(COMMAND ./addtestscript) which runs and creates the list of ADD_TEST()
commands and puts them in a file. But I don't know how to include this
file in the ADD_CUSTOM_COMMAND
The closest I got was:
ADD_CUSTOM_COMMAND(TARGET ${BIN_NAME}
POST_BUILD
WORKING_DIRECTORY ${SRC_DIR}
COMMAND bash ./addtestscrpt
COMMAND ${CMAKE_COMMAND} ${SRC_DIR}/DDSCommonTests/CMakeLists.txt
)
where ${SRC_DIR}/DDSCommonTests/CMakeLists.txt
contains
ENABLE_TESTING()
INCLUDE(${SRC_DIR)/testlist)
but this doesn't work presumably because CTest needs to know about the
CTestTestfile.cmake in this directory, again in the post_build step.
Is there any way to a) Add the INCLUDE(testlist) to the
ADD_CUSTOM_COMMAND or b) tell CTest to read the CTestTestfile.cmake from
that directory or c) Any other way of solving this?
Thanks.
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20100826/ccbe20c1/attachment-0001.htm>
More information about the CMake
mailing list