mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	docs for signature based parametrised test cases
This commit is contained in:
		| @@ -6,6 +6,7 @@ | |||||||
| [Tag aliases](#tag-aliases)<br> | [Tag aliases](#tag-aliases)<br> | ||||||
| [BDD-style test cases](#bdd-style-test-cases)<br> | [BDD-style test cases](#bdd-style-test-cases)<br> | ||||||
| [Type parametrised test cases](#type-parametrised-test-cases)<br> | [Type parametrised test cases](#type-parametrised-test-cases)<br> | ||||||
|  | [Signature based parametrised test cases](#signature-based-parametrised-test-cases)<br> | ||||||
|  |  | ||||||
| While Catch fully supports the traditional, xUnit, style of class-based fixtures containing test case methods this is not the preferred style. | While Catch fully supports the traditional, xUnit, style of class-based fixtures containing test case methods this is not the preferred style. | ||||||
|  |  | ||||||
| @@ -191,6 +192,56 @@ _While there is an upper limit on the number of types you can specify | |||||||
| in single `TEMPLATE_TEST_CASE` or `TEMPLATE_PRODUCT_TEST_CASE`, the limit | in single `TEMPLATE_TEST_CASE` or `TEMPLATE_PRODUCT_TEST_CASE`, the limit | ||||||
| is very high and should not be encountered in practice._ | is very high and should not be encountered in practice._ | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Signature based parametrised test cases | ||||||
|  |  | ||||||
|  | In addition to [type parametrised test cases](#type-parametrised-test-cases) Catch2 also supports | ||||||
|  | signature base parametrised test cases, in form of `TEMPLATE_TEST_CASE_SIG` and `TEMPLATE_PRODUCT_TEST_CASE_SIG`. | ||||||
|  | These test cases have similar syntax like [type parametrised test cases](#type-parametrised-test-cases), with one | ||||||
|  | additional positional argument which specifies the signature. | ||||||
|  |  | ||||||
|  | ### Signature | ||||||
|  | Signature has some strict rules for these tests cases to work properly: | ||||||
|  | * signature with multiple template parameters e.g. `typename T, size_t S` must have this format in test case declaration | ||||||
|  |   `((typename T, size_t S), T, S)` | ||||||
|  | * signature with variadic template arguments e.g. `typename T, size_t S, typename...Ts` must have this format in test case declaration | ||||||
|  |   `((typename T, size_t S, typename...Ts), T, S, Ts...)` | ||||||
|  | * signature with single non type template parameter e.g. `int V` must have this format in test case declaration `((int V), V)` | ||||||
|  | * signature with single type template parameter e.g. `typename T` should not be used as it is in fact `TEMPLATE_TEST_CASE` | ||||||
|  |  | ||||||
|  | Currently Catch2 support up to 11 template parameters in signature | ||||||
|  |  | ||||||
|  | ### Examples | ||||||
|  |  | ||||||
|  | * **TEMPLATE_TEST_CASE_SIG(** _test name_ , _tags_,  _signature_, _type1_, _type2_, ..., _typen_ **)** | ||||||
|  |  | ||||||
|  | Inside `TEMPLATE_TEST_CASE_SIG` test case you can use the names of template parameters as defined in _signature_.  | ||||||
|  |  | ||||||
|  | ```cpp | ||||||
|  | TEMPLATE_TEST_CASE_SIG("TemplateTestSig: arrays can be created from NTTP arguments", "[vector][template][nttp]", | ||||||
|  |   ((typename T, int V), T, V), (int,5), (float,4), (std::string,15), ((std::tuple<int, float>), 6)) { | ||||||
|  |  | ||||||
|  |     std::array<T, V> v; | ||||||
|  |     REQUIRE(v.size() > 1); | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | * **TEMPLATE_PRODUCT_TEST_CASE_SIG(** _test name_ , _tags_, _signature_, (_template-type1_, _template-type2_, ..., _template-typen_), (_template-arg1_, _template-arg2_, ..., _template-argm_) **)** | ||||||
|  |  | ||||||
|  | ```cpp | ||||||
|  |  | ||||||
|  | template<typename T, size_t S> | ||||||
|  | struct Bar { | ||||||
|  |     size_t size() { return S; } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | TEMPLATE_PRODUCT_TEST_CASE_SIG("A Template product test case with array signature", "[template][product][nttp]", ((typename T, size_t S), T, S), (std::array, Bar), ((int, 9), (float, 42))) { | ||||||
|  |     TestType x; | ||||||
|  |     REQUIRE(x.size() > 0); | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  |  | ||||||
| --- | --- | ||||||
|  |  | ||||||
| [Home](Readme.md#top) | [Home](Readme.md#top) | ||||||
|   | |||||||
| @@ -84,6 +84,33 @@ _While there is an upper limit on the number of types you can specify | |||||||
| in single `TEMPLATE_TEST_CASE_METHOD` or `TEMPLATE_PRODUCT_TEST_CASE_METHOD`, | in single `TEMPLATE_TEST_CASE_METHOD` or `TEMPLATE_PRODUCT_TEST_CASE_METHOD`, | ||||||
| the limit is very high and should not be encountered in practice._ | the limit is very high and should not be encountered in practice._ | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Catch2 also provides `TEMPLATE_TEST_CASE_METHOD_SIG` and `TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG` to support | ||||||
|  | fixtures using non-type template parameters. These test cases work similar to `TEMPLATE_TEST_CASE_METHOD` and `TEMPLATE_PRODUCT_TEST_CASE_METHOD`, | ||||||
|  | with additional positional argument for [signature](test-cases-and-sections.md#signature-based-parametrised-test-cases). | ||||||
|  |  | ||||||
|  | Example: | ||||||
|  | ```cpp | ||||||
|  | template <int V> | ||||||
|  | struct Nttp_Fixture{ | ||||||
|  |     int value = V; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | TEMPLATE_TEST_CASE_METHOD_SIG(Nttp_Fixture, "A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds", "[class][template][nttp]",((int V), V), 1, 3, 6) { | ||||||
|  |     REQUIRE(Nttp_Fixture<V>::value > 0); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | template< typename T, size_t V> | ||||||
|  | struct Template_Foo_2 { | ||||||
|  |     size_t size() { return V; } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG(Template_Fixture_2, "A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds", "[class][template][product][nttp]", ((typename T, size_t S), T, S),(std::array, Template_Foo_2), ((int,2), (float,6))) | ||||||
|  | { | ||||||
|  |     REQUIRE(Template_Fixture_2<TestType>{}.m_a.size() >= 2); | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  |  | ||||||
| --- | --- | ||||||
|  |  | ||||||
| [Home](Readme.md#top) | [Home](Readme.md#top) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jozef Grajciar
					Jozef Grajciar