CMake for integrated Microsoft Unit Testing Framew

2019-05-31 10:53发布

问题:

Similar to my previous question but specifically for the Microsoft Unit Testing Framework:

Visual Studio 2017 has integrated C++ unit testing (MS unit testing, google test, etc.). How can I create a CMakeLists.txt file that will create a project like this that will use the integrated IDE testing, specifically using the Microsoft Unit Testing Framework?

Thank you!

回答1:

This works for me:

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(tests)
include_directories("D:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Auxiliary/VS/UnitTest/include")
link_directories("D:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Auxiliary/VS/UnitTest/lib/x86/Microsoft.VisualStudio.TestTools.CppUnitTestFramework.lib")
add_library(tests SHARED tests.cpp)

You might need to change the path to where you have Visual Studio installed.

tests.cpp

#include <CppUnitTest.h>
using namespace Microsoft::VisualStudio::CppUnitTestFramework;

TEST_MODULE_INITIALIZE(ModuleInitialize)
{
    Logger::WriteMessage("In Module Initialize");
}

TEST_MODULE_CLEANUP(ModuleCleanup)
{
    Logger::WriteMessage("In Module Cleanup");
}

TEST_CLASS(Class1)
{

public:

    Class1()
    {
        Logger::WriteMessage("In Class1");
    }

    ~Class1()
    {
        Logger::WriteMessage("In ~Class1");
    }

    TEST_CLASS_INITIALIZE(ClassInitialize)
    {
        Logger::WriteMessage("In Class Initialize");
    }

    TEST_CLASS_CLEANUP(ClassCleanup)
    {
        Logger::WriteMessage("In Class Cleanup");
    }

    TEST_METHOD(Method1)
    {
        Logger::WriteMessage("In Method1");
        Assert::AreEqual(0, 0);
    }

    TEST_METHOD(Method2)
    {
        Assert::Fail(L"Fail");
    }
};

In the Tests output I have

[1/4/2019 9:51:56 PM Informational] ------ Discover test started ------
[1/4/2019 9:51:59 PM Warning] No test is available in D:\dev\cpptest\SO54039205\Debug\SO54039205.exe. Make sure that test discoverer & executors are registered and platform & framework version settings are appropriate and try again.
[1/4/2019 9:51:59 PM Informational] ========== Discover test finished: 0 found (0:00:02.8603805) ==========
[1/4/2019 9:54:14 PM Informational] ------ Discover test started ------
[1/4/2019 9:54:18 PM Warning] No test is available in D:\dev\cpptest\SO54039205\Debug\SO54039205.exe. Make sure that test discoverer & executors are registered and platform & framework version settings are appropriate and try again.
[1/4/2019 9:54:18 PM Informational] ========== Discover test finished: 0 found (0:00:03.7709729) ==========
[1/4/2019 9:54:38 PM Informational] ------ Discover test started ------
[1/4/2019 9:54:39 PM Warning] No test is available in D:\dev\cpptest\SO54039205\Debug\SO54039205.exe. Make sure that test discoverer & executors are registered and platform & framework version settings are appropriate and try again.
[1/4/2019 9:54:39 PM Informational] ========== Discover test finished: 0 found (0:00:00.7098537) ==========
[1/4/2019 9:54:49 PM Informational] ------ Discover test started ------
[1/4/2019 9:54:50 PM Warning] No test is available in D:\dev\cpptest\SO54039205\Debug\SO54039205.exe. Make sure that test discoverer & executors are registered and platform & framework version settings are appropriate and try again.
[1/4/2019 9:54:50 PM Informational] ========== Discover test finished: 0 found (0:00:00.7292453) ==========
[1/4/2019 9:54:56 PM Informational] ------ Discover test started ------
[1/4/2019 9:54:56 PM Warning] No test is available in D:\dev\cpptest\SO54039205\Debug\SO54039205.exe. Make sure that test discoverer & executors are registered and platform & framework version settings are appropriate and try again.
[1/4/2019 9:54:56 PM Informational] ========== Discover test finished: 0 found (0:00:00.7365023) ==========
[1/4/2019 9:55:00 PM Informational] ------ Discover test started ------
[1/4/2019 9:55:01 PM Warning] No test is available in D:\dev\cpptest\SO54039205\Debug\SO54039205.exe. Make sure that test discoverer & executors are registered and platform & framework version settings are appropriate and try again.
[1/4/2019 9:55:01 PM Informational] ========== Discover test finished: 0 found (0:00:00.7208954) ==========
[1/4/2019 9:55:01 PM Informational] ------ Discover test started ------
[1/4/2019 9:55:02 PM Warning] No test is available in D:\dev\cpptest\SO54039205\Debug\SO54039205.exe. Make sure that test discoverer & executors are registered and platform & framework version settings are appropriate and try again.
[1/4/2019 9:55:02 PM Informational] ========== Discover test finished: 0 found (0:00:00.6999031) ==========
[1/4/2019 10:34:09 PM Informational] ------ Discover test started ------
[1/4/2019 10:34:13 PM Informational] ========== Discover test finished: 2 found (0:00:04.0145243) ==========
[1/4/2019 10:34:19 PM Informational] ------ Run test started ------
[1/4/2019 10:34:20 PM Informational] In Module Initialize
[1/4/2019 10:34:20 PM Informational] In Class Initialize
[1/4/2019 10:34:20 PM Informational] In Class1
[1/4/2019 10:34:20 PM Informational] In Method1
[1/4/2019 10:34:20 PM Informational] In ~Class1
[1/4/2019 10:34:20 PM Informational] In Class1
[1/4/2019 10:34:20 PM Informational] In ~Class1
[1/4/2019 10:34:20 PM Informational] In Class Cleanup
[1/4/2019 10:34:20 PM Informational] In Module Cleanup
[1/4/2019 10:34:21 PM Informational] ========== Run test finished: 2 run (0:00:01.1969982) ==========

Please note that from Visual Studio 2019 this test framework will be deprecated, so I would not adive you to invest in it. From the release notes: "The Managed C++ Test Project template is no longer available. You can continue using the Managed C++ Test framework in your existing projects but, for new unit tests, consider using one of the native test frameworks for which Visual Studio provides templates (MSTest, Google Test) or the Managed C# Test Project template"