Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/tests/SelfTest/UsageTests
diff options
context:
space:
mode:
authorKeith Stockdale2024-08-05 16:01:41 +0100
committerGitHub2024-08-05 17:01:41 +0200
commitf7cd0ba0511b61592e70f07533d7ea30a8a5395d (patch)
treef9b92e05f1870f5b1b4f4f65a95ab3b3e5266c10 /tests/SelfTest/UsageTests
parent33e24b14fcf95c1c31c8d6b68f445ebb12e026cc (diff)
downloadcatch3-f7cd0ba0511b61592e70f07533d7ea30a8a5395d.tar.gz
TEST_CASE_PERSISTENT_FIXTURE: A new fixture macro for allowing persistent 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ý <martin.horenovsky@gmail.com>
Diffstat (limited to 'tests/SelfTest/UsageTests')
-rw-r--r--tests/SelfTest/UsageTests/Class.tests.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/SelfTest/UsageTests/Class.tests.cpp b/tests/SelfTest/UsageTests/Class.tests.cpp
index 682171da..75510f10 100644
--- a/tests/SelfTest/UsageTests/Class.tests.cpp
+++ b/tests/SelfTest/UsageTests/Class.tests.cpp
@@ -32,6 +32,10 @@ namespace {
int m_a;
};
+ struct Persistent_Fixture {
+ mutable int m_a = 0;
+ };
+
template <typename T> struct Template_Fixture {
Template_Fixture(): m_a( 1 ) {}
@@ -64,6 +68,17 @@ TEST_CASE_METHOD( Fixture, "A TEST_CASE_METHOD based test run that succeeds", "[
REQUIRE( m_a == 1 );
}
+TEST_CASE_PERSISTENT_FIXTURE( Persistent_Fixture, "A TEST_CASE_PERSISTENT_FIXTURE based test run that succeeds", "[class]" )
+{
+ SECTION( "First partial run" ) {
+ REQUIRE( m_a++ == 0 );
+ }
+
+ SECTION( "Second partial run" ) {
+ REQUIRE( m_a == 1 );
+ }
+}
+
TEMPLATE_TEST_CASE_METHOD(Template_Fixture, "A TEMPLATE_TEST_CASE_METHOD based test run that succeeds", "[class][template]", int, float, double) {
REQUIRE( Template_Fixture<TestType>::m_a == 1 );
}
@@ -96,6 +111,17 @@ namespace Inner
REQUIRE( m_a == 2 );
}
+ TEST_CASE_PERSISTENT_FIXTURE( Persistent_Fixture, "A TEST_CASE_PERSISTENT_FIXTURE based test run that fails", "[.][class][failing]" )
+ {
+ SECTION( "First partial run" ) {
+ REQUIRE( m_a++ == 0 );
+ }
+
+ SECTION( "Second partial run" ) {
+ REQUIRE( m_a == 0 );
+ }
+ }
+
TEMPLATE_TEST_CASE_METHOD(Template_Fixture,"A TEMPLATE_TEST_CASE_METHOD based test run that fails", "[.][class][template][failing]", int, float, double)
{
REQUIRE( Template_Fixture<TestType>::m_a == 2 );