diff --git a/CMakeLists.txt b/CMakeLists.txt
index d8fca87f5c5a90e033c35d80e7cc0f203873f0da..06e303457b09212e17e67f2474a0a596a28598bb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -37,7 +37,7 @@ include(CheckCompiler)
 include(BornAgainConfiguration)
 include(GeneratePythonDocs)
 include(FuTestMacros)
-include(UnitTests)
+include(GoogletestWrapper)
 
 #--- Recurse into the given subdirectories ---
 if(BORNAGAIN_USERMANUAL)
@@ -59,5 +59,6 @@ add_subdirectory(Tests/FunctionalTests)  # functional tests (make check)
 
 add_subdirectory(cmake/bornagain) # trick to print an after-install message
 
-# packaging
+#--- Make test and package targets ---
+add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) # => 'make check' is an alias for 'ctest'
 include(BornAgainCPack)
diff --git a/Tests/FunctionalTests/CMakeLists.txt b/Tests/FunctionalTests/CMakeLists.txt
index 0dccfb406955a97b810a49153bd3af5424c3d7bc..449ff65f2b2c2278eac366aba7018b097a058004 100644
--- a/Tests/FunctionalTests/CMakeLists.txt
+++ b/Tests/FunctionalTests/CMakeLists.txt
@@ -2,9 +2,6 @@
 # FunctionalTests/CMakeLists.txt (called from top-level CMakeLists.txt)
 ############################################################################
 
-add_custom_target(check ${CMAKE_CTEST_COMMAND})
-# export CTEST_OUTPUT_ON_FAILURE=ON will give some output on failure
-
 execute_process( COMMAND ${CMAKE_COMMAND} -E copy_directory
     ${CMAKE_SOURCE_DIR}/Tests/ReferenceData/BornAgain
     ${CMAKE_BINARY_DIR}/Tests/ReferenceData/BornAgain )
diff --git a/Tests/UnitTests/Core/CMakeLists.txt b/Tests/UnitTests/Core/CMakeLists.txt
index e5cb839be2c3835f1ab84e0bff38465ecad6f9ba..b23df84b6608a84950d2d90f7b7bc23a1e926c26 100644
--- a/Tests/UnitTests/Core/CMakeLists.txt
+++ b/Tests/UnitTests/Core/CMakeLists.txt
@@ -16,13 +16,14 @@ endif()
 
 # function UNIT_TESTS defined in cmake/modules/UnitTests.cmake
 
-UNIT_TESTS(TestCoreQ "Q" ${BornAgainCore_LIBRARY}) # q loops, lengthy output
-UNIT_TESTS(TestCoreP "P" ${BornAgainCore_LIBRARY}) # q loops, lengthy output
-UNIT_TESTS(TestCore0 "0" ${BornAgainCore_LIBRARY})
-UNIT_TESTS(TestCore1 "1" ${BornAgainCore_LIBRARY})
-UNIT_TESTS(TestCore2 "2" ${BornAgainCore_LIBRARY})
-UNIT_TESTS(TestCore3 "3" ${BornAgainCore_LIBRARY})
-UNIT_TESTS(TestCore4 "4" ${BornAgainCore_LIBRARY})
-UNIT_TESTS(TestCore5 "5" ${BornAgainCore_LIBRARY})
-UNIT_TESTS(TestCore6 "6" ${BornAgainCore_LIBRARY})
-UNIT_TESTS(TestCoreS "S" ${BornAgainCore_LIBRARY})
+WRAP_GTEST(TestCore0 "0" ${BornAgainCore_LIBRARY} 0)
+WRAP_GTEST(TestCore1 "1" ${BornAgainCore_LIBRARY} 0)
+WRAP_GTEST(TestCore2 "2" ${BornAgainCore_LIBRARY} 0)
+WRAP_GTEST(TestCore3 "3" ${BornAgainCore_LIBRARY} 0)
+WRAP_GTEST(TestCore4 "4" ${BornAgainCore_LIBRARY} 0)
+WRAP_GTEST(TestCore5 "5" ${BornAgainCore_LIBRARY} 0)
+WRAP_GTEST(TestCore6 "6" ${BornAgainCore_LIBRARY} 0)
+
+WRAP_GTEST(TestCoreS "S" ${BornAgainCore_LIBRARY} 1)
+WRAP_GTEST(TestCoreQ "Q" ${BornAgainCore_LIBRARY} 1) # q loops, lengthy output
+WRAP_GTEST(TestCoreP "P" ${BornAgainCore_LIBRARY} 1) # q loops, lengthy output
diff --git a/Tests/UnitTests/Fit/CMakeLists.txt b/Tests/UnitTests/Fit/CMakeLists.txt
index 9042a7e71a2335509a0e81dcb4976f82dd6490d9..02a9b95224b7e47aebabaaa6885c951c97b9df21 100644
--- a/Tests/UnitTests/Fit/CMakeLists.txt
+++ b/Tests/UnitTests/Fit/CMakeLists.txt
@@ -14,6 +14,4 @@ if(BORNAGAIN_OPENMPI)
     include_directories(${MPI_INCLUDE_PATH})
 endif()
 
-# function UNIT_TESTS defined in cmake/modules/UnitTests.cmake
-
-UNIT_TESTS(TestFit0 "." ${BornAgainFit_LIBRARY})
+WRAP_GTEST(TestFit0 "." ${BornAgainFit_LIBRARY} 0)
diff --git a/cmake/bornagain/modules/FuTestMacros.cmake b/cmake/bornagain/modules/FuTestMacros.cmake
index 52a85548b605c4e654ef274ed2cc4238748fb5b0..eb5211b89ee3c92038c1a75ec7e138a160296fbd 100644
--- a/cmake/bornagain/modules/FuTestMacros.cmake
+++ b/cmake/bornagain/modules/FuTestMacros.cmake
@@ -74,5 +74,4 @@ endfunction()
 function(BORNAGAIN_ADD_TEST test_name test_exe)
     cmake_parse_arguments(ARG "" "TEST_ARGUMENTS" "" "" ${ARGN})
     add_test(${test_name} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${test_exe} "${ARG_TEST_ARGUMENTS}")
-    add_dependencies(check ${test_exe})
 endfunction()
diff --git a/cmake/bornagain/modules/UnitTests.cmake b/cmake/bornagain/modules/GoogletestWrapper.cmake
similarity index 71%
rename from cmake/bornagain/modules/UnitTests.cmake
rename to cmake/bornagain/modules/GoogletestWrapper.cmake
index db11967c3b8210c573021285140951cc09c8fe44..540e5c6fca844ab3ad7e4413463d6fc5ce6886ba 100644
--- a/cmake/bornagain/modules/UnitTests.cmake
+++ b/cmake/bornagain/modules/GoogletestWrapper.cmake
@@ -2,8 +2,8 @@
 #
 #  BornAgain: simulate and fit scattering at grazing incidence
 #
-#  @file      cmake/modules/UnitTests
-#  @brief     Implements function UNIT_TESTS(..)
+#  @file      cmake/bornagain/modules/GoogletestWrapper.cmake
+#  @brief     Implements function WRAP_GTEST(..)
 #
 #  @homepage  http://www.bornagainproject.org
 #  @license   GNU General Public License v3 or higher (see COPYING)
@@ -15,7 +15,10 @@
 
 #  @brief Compile tests given as .h files in SUBDIR, link with LINK_LIB, and execute
 
-function(UNIT_TESTS TEST_NAME SUBDIR LINK_LIB)
+#  STAGE=0: test run at compile time
+#  STAGE=1: test run upon "ctest"="make check"
+
+function(WRAP_GTEST TEST_NAME SUBDIR LINK_LIB STAGE)
     include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
 
     file(GLOB INCLUDE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${SUBDIR}/*.h")
@@ -23,12 +26,12 @@ function(UNIT_TESTS TEST_NAME SUBDIR LINK_LIB)
 
     # Compose main program (C++ snippets plus #include's of test code from SUBDIR)
     set(TMP "/* Generated by CMake. Do not edit. Do not put under version control. */\n")
-    file(READ "${TEMPLATE_DIR}/unitTests.cpp.header" TMPTMP)
+    file(READ "${TEMPLATE_DIR}/GoogletestHeader.cpp" TMPTMP)
     set(TMP "${TMP}\n${TMPTMP}\n")
     foreach(FILE ${INCLUDE_FILES})
         set(TMP "${TMP}#include \"${CMAKE_CURRENT_SOURCE_DIR}/${FILE}\"\n")
     endforeach()
-    file(READ "${TEMPLATE_DIR}/unitTests.cpp.footer" TMPTMP)
+    file(READ "${TEMPLATE_DIR}/GoogletestFooter.cpp" TMPTMP)
     set(TMP "${TMP}\n${TMPTMP}")
 
     set(TEST_SRC "${BUILD_AUTO_DIR}/${TEST_NAME}.cpp")
@@ -42,10 +45,14 @@ function(UNIT_TESTS TEST_NAME SUBDIR LINK_LIB)
     # to prevent problems with finding libBornAgainCore.dll under Windows
     set_property(TARGET ${EXE} PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
 
-    add_test(${TEST_NAME} ${EXE})
-
-    # Add execution of TestCore just after compilation
-    add_custom_command(TARGET ${TEST_NAME} POST_BUILD COMMAND ${EXE})
+    if    (${STAGE} EQUAL 0)
+        # Add execution of TestCore just after compilation
+        add_custom_command(TARGET ${TEST_NAME} POST_BUILD COMMAND ${EXE})
+    elseif(${STAGE} EQUAL 1)
+        add_test(${TEST_NAME} ${EXE})
+    else()
+        message(FATAL_ERROR "invalid parameter STAGE=${STAGE} in WRAP_GTEST")
+    endif()
 
     # To make the .h files appear in QtCreator's project tree
     add_custom_target("${TEST_NAME}_sources" SOURCES ${INCLUDE_FILES})
diff --git a/cmake/bornagain/scripts/unitTests.cpp.footer b/cmake/bornagain/scripts/GoogletestFooter.cpp
similarity index 87%
rename from cmake/bornagain/scripts/unitTests.cpp.footer
rename to cmake/bornagain/scripts/GoogletestFooter.cpp
index 8d131ad6d166a300f49b7cee44631e60fd1f6b30..496e790edd87d1b44d26c1ea2aeccd07e3297ea6 100644
--- a/cmake/bornagain/scripts/unitTests.cpp.footer
+++ b/cmake/bornagain/scripts/GoogletestFooter.cpp
@@ -1,4 +1,4 @@
-/* From unitTests.cpp.footer: */
+/* From GoogletestFooter.cpp: */
 
 struct ErrorStreamRedirect {
     ErrorStreamRedirect( std::streambuf * new_buffer )
@@ -15,7 +15,7 @@ private:
 
 int main(int argc, char** argv)
 {
-    std::cout << "UnitTest::main ...\n";
+    std::cout << "GoogleTest::main ...\n";
     ::testing::InitGoogleTest(&argc, argv);
 
     // redirect std::cerr stream
diff --git a/cmake/bornagain/scripts/unitTests.cpp.header b/cmake/bornagain/scripts/GoogletestHeader.cpp
similarity index 79%
rename from cmake/bornagain/scripts/unitTests.cpp.header
rename to cmake/bornagain/scripts/GoogletestHeader.cpp
index 2a00517bcbab88aca345843c066b1de4b32cf3aa..bd1977c216c25ee8096800a2bd5afc9823ea1e74 100644
--- a/cmake/bornagain/scripts/unitTests.cpp.header
+++ b/cmake/bornagain/scripts/GoogletestHeader.cpp
@@ -1,4 +1,4 @@
-/* From unitTests.cpp.header: */
+/* From GoogletestHeader.cpp: */
 
 #ifdef _MSC_VER
 #define _VARIADIC_MAX 10