Using Approval Tests With doctest
Introduction
The doctest test framework works well with Approval Tests.
Notes pre-v.10.8.0:
Earlier versions of Approval Tests had issues with Ninja. Read more at Troubleshooting Misconfigured Build.
Doctest is similar to Catch, but claims to give faster compilation times.
Requirements
Approval Tests for doctest requires that a file called the following is found:
#include <doctest/doctest.h>
(See snippet source)
Approval Tests needs doctest version 2.3.4 or above.
Getting Started With doctest
New Project
Create a file main.cpp
and add just the following two lines:
// main.cpp:
#define APPROVALS_DOCTEST // This tells Approval Tests to provide a main() - only do this in one cpp file
#include "ApprovalTests.hpp"
(See snippet source)
Existing Project - with your main()
If you have supplied your own main() for doctest, you will need to teach it how to supply test names to Approval Tests.
You should make the following additions to your own source file that
contains main()
.
// Add these two lines to the top of your main.cpp file:
#define APPROVALS_DOCTEST_EXISTING_MAIN
#include "ApprovalTests.hpp"
(See snippet source)
Code to copy for your first doctest Approvals test
Here is sample code to create your main()
function, to set up
Approval Tests’ doctest integration.
We called this file doctest_starter_main.cpp
:
#define APPROVALS_DOCTEST
#include "ApprovalTests.hpp"
// This puts "received" and "approved" files in approval_tests/ sub-directory,
// keeping the test source directory tidy:
auto directoryDisposer =
ApprovalTests::Approvals::useApprovalsSubdirectory("approval_tests");
(See snippet source)
Here is sample code to create your first test. We called this file
doctest_starter_test.cpp
:
#include "doctest/doctest.h"
#include "ApprovalTests.hpp"
TEST_CASE("doctest_starter sample")
{
// TODO Replace 42 with the value or object whose contents you are verifying.
// For help, see:
// https://approvaltestscpp.readthedocs.io/en/latest/generated_docs/ToString.html
ApprovalTests::Approvals::verify(42);
}
(See snippet source)
And finally, here is sample code to put in your CMakeLists.txt
file:
set(EXE_NAME doctest_starter)
set(CMAKE_CXX_STANDARD 11)
add_executable(${EXE_NAME}
doctest_starter_main.cpp
doctest_starter_test.cpp
)
target_link_libraries(${EXE_NAME} ApprovalTests::ApprovalTests doctest::doctest)
add_test(NAME ${EXE_NAME} COMMAND ${EXE_NAME})
(See snippet source)