CMake for integrated Microsoft Unit Testing Framew

2019-05-31 10:15发布

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条回答
\"骚年 ilove
2楼-- · 2019-05-31 11:02

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) ==========

enter image description here

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"

查看更多
登录 后发表回答