-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
TEST_CASE_PERSISTENT_FIXTURE: A new fixture macro for allowing persis…
…tent fixtures throughout a TEST_CASE (#2885) This PR introduces a new `TEST_CASE` macro called `TEST_CASE_PERSISTENT_FIXTURE`. `TEST_CASE_PERSISTENT_FIXTURE` offers the same functionality as `TEST_CASE_METHOD` except for one difference. The object on which the test method is invoked is only created once for all invocations of the test case. The object is created just after the `testCaseStarting` event is broadcast and the object is destroyed just before the `testCaseEnding` event is broadcast. The main motivation for this new functionality is to allow `TEST_CASE`s to do expensive setup and teardown once per `TEST_CASE`, without having to resort to abusing event listeners or static function variables with manual initialization. Implements #1602 --------- Co-authored-by: Martin Hořeňovský <[email protected]>
- Loading branch information
Showing
31 changed files
with
643 additions
and
62 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
|
||
// Copyright Catch2 Authors | ||
// Distributed under the Boost Software License, Version 1.0. | ||
// (See accompanying file LICENSE.txt or copy at | ||
// https://www.boost.org/LICENSE_1_0.txt) | ||
|
||
// SPDX-License-Identifier: BSL-1.0 | ||
|
||
// Fixture.cpp | ||
|
||
// Catch2 has three ways to express fixtures: | ||
// - Sections | ||
// - Traditional class-based fixtures that are created and destroyed on every | ||
// partial run | ||
// - Traditional class-based fixtures that are created at the start of a test | ||
// case and destroyed at the end of a test case (this file) | ||
|
||
// main() provided by linkage to Catch2WithMain | ||
|
||
#include <catch2/catch_test_macros.hpp> | ||
|
||
#include <thread> | ||
|
||
class ClassWithExpensiveSetup { | ||
public: | ||
ClassWithExpensiveSetup() { | ||
// Imagine some really expensive set up here. | ||
// e.g. | ||
// setting up a D3D12/Vulkan Device, | ||
// connecting to a database, | ||
// loading a file | ||
// etc etc etc | ||
std::this_thread::sleep_for( std::chrono::seconds( 2 ) ); | ||
} | ||
|
||
~ClassWithExpensiveSetup() noexcept { | ||
// We can do any clean up of the expensive class in the destructor | ||
// e.g. | ||
// destroy D3D12/Vulkan Device, | ||
// disconnecting from a database, | ||
// release file handle | ||
// etc etc etc | ||
std::this_thread::sleep_for( std::chrono::seconds( 1 ) ); | ||
} | ||
|
||
int getInt() const { return 42; } | ||
}; | ||
|
||
struct MyFixture { | ||
|
||
// The test case member function is const. | ||
// Therefore we need to mark any member of the fixture | ||
// that needs to mutate as mutable. | ||
mutable int myInt = 0; | ||
ClassWithExpensiveSetup expensive; | ||
}; | ||
|
||
// Only one object of type MyFixture will be instantiated for the run | ||
// of this test case even though there are two leaf sections. | ||
// This is useful if your test case requires an object that is | ||
// expensive to create and could be reused for each partial run of the | ||
// test case. | ||
TEST_CASE_PERSISTENT_FIXTURE( MyFixture, "Tests with MyFixture" ) { | ||
|
||
const int val = myInt++; | ||
|
||
SECTION( "First partial run" ) { | ||
const auto otherValue = expensive.getInt(); | ||
REQUIRE( val == 0 ); | ||
REQUIRE( otherValue == 42 ); | ||
} | ||
|
||
SECTION( "Second partial run" ) { REQUIRE( val == 1 ); } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.