Skip to content

Commit 0c9273e

Browse files
Support global IgnoreParameters setting (#1701)
* Support global IgnoreParameters setting Add VerifierSettings.IgnoreParameters API and global backing to ignore parameter names across all tests. FileNameBuilder now merges instance-level ignored parameters with VerifierSettings.GlobalIgnoredParameters and validates ignored names against method parameters. Reset logic clears the global ignored set in serialization settings. Update docs (parameterised-*, ignore-parameters.include) to document static IgnoreParameters usage and add StaticSettingsTests/IgnoreParametersTests.cs and its verified file to cover the behavior. * Docs changes --------- Co-authored-by: GitHub Action <action@github.com>
1 parent 66ad135 commit 0c9273e

12 files changed

Lines changed: 146 additions & 9 deletions

docs/mdsource/ignore-parameters.include.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,18 @@ For the fluent case:
1515
* NamerTests.IgnoreParametersForVerifiedFluent_arg=One.received.txt
1616
* NamerTests.IgnoreParametersForVerifiedFluent_arg=Two.received.txt
1717
* NamerTests.IgnoreParametersForVerifiedFluent.verified.txt
18+
19+
20+
### Static IgnoreParameters
21+
22+
`VerifierSettings.IgnoreParameters()` can be used to globally ignore specific parameters (by name) for all tests. This is useful when a parameter is non-deterministic or irrelevant to the verified output across the entire test suite. It must be called before any test runs, typically in a `[ModuleInitializer]`.
23+
24+
When passing an empty list, all parameters will be ignored. When passing specific parameter names, only those parameters will be excluded from the verified filename. Parameters that do not exist on a given test method are silently skipped.
25+
26+
The received files still contain all parameter values.
27+
28+
```cs
29+
[ModuleInitializer]
30+
public static void Init() =>
31+
VerifierSettings.IgnoreParameters("arg");
32+
```

docs/parameterised-fixie.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,23 @@ For the fluent case:
194194

195195
* NamerTests.IgnoreParametersForVerifiedFluent_arg=One.received.txt
196196
* NamerTests.IgnoreParametersForVerifiedFluent_arg=Two.received.txt
197-
* NamerTests.IgnoreParametersForVerifiedFluent.verified.txt<!-- endInclude -->
197+
* NamerTests.IgnoreParametersForVerifiedFluent.verified.txt
198+
199+
200+
### Static IgnoreParameters
201+
202+
`VerifierSettings.IgnoreParameters()` can be used to globally ignore specific parameters (by name) for all tests. This is useful when a parameter is non-deterministic or irrelevant to the verified output across the entire test suite. It must be called before any test runs, typically in a `[ModuleInitializer]`.
203+
204+
When passing an empty list, all parameters will be ignored. When passing specific parameter names, only those parameters will be excluded from the verified filename. Parameters that do not exist on a given test method are silently skipped.
205+
206+
The received files still contain all parameter values.
207+
208+
```cs
209+
[ModuleInitializer]
210+
public static void Init() =>
211+
VerifierSettings.IgnoreParameters("arg");
212+
```
213+
<!-- endInclude -->
198214

199215

200216
## IgnoreParametersForVerified with override parameters

docs/parameterised-mstest.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,23 @@ For the fluent case:
100100

101101
* NamerTests.IgnoreParametersForVerifiedFluent_arg=One.received.txt
102102
* NamerTests.IgnoreParametersForVerifiedFluent_arg=Two.received.txt
103-
* NamerTests.IgnoreParametersForVerifiedFluent.verified.txt<!-- endInclude -->
103+
* NamerTests.IgnoreParametersForVerifiedFluent.verified.txt
104+
105+
106+
### Static IgnoreParameters
107+
108+
`VerifierSettings.IgnoreParameters()` can be used to globally ignore specific parameters (by name) for all tests. This is useful when a parameter is non-deterministic or irrelevant to the verified output across the entire test suite. It must be called before any test runs, typically in a `[ModuleInitializer]`.
109+
110+
When passing an empty list, all parameters will be ignored. When passing specific parameter names, only those parameters will be excluded from the verified filename. Parameters that do not exist on a given test method are silently skipped.
111+
112+
The received files still contain all parameter values.
113+
114+
```cs
115+
[ModuleInitializer]
116+
public static void Init() =>
117+
VerifierSettings.IgnoreParameters("arg");
118+
```
119+
<!-- endInclude -->
104120

105121

106122
### Instance

docs/parameterised-nunit.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,23 @@ For the fluent case:
198198

199199
* NamerTests.IgnoreParametersForVerifiedFluent_arg=One.received.txt
200200
* NamerTests.IgnoreParametersForVerifiedFluent_arg=Two.received.txt
201-
* NamerTests.IgnoreParametersForVerifiedFluent.verified.txt<!-- endInclude -->
201+
* NamerTests.IgnoreParametersForVerifiedFluent.verified.txt
202+
203+
204+
### Static IgnoreParameters
205+
206+
`VerifierSettings.IgnoreParameters()` can be used to globally ignore specific parameters (by name) for all tests. This is useful when a parameter is non-deterministic or irrelevant to the verified output across the entire test suite. It must be called before any test runs, typically in a `[ModuleInitializer]`.
207+
208+
When passing an empty list, all parameters will be ignored. When passing specific parameter names, only those parameters will be excluded from the verified filename. Parameters that do not exist on a given test method are silently skipped.
209+
210+
The received files still contain all parameter values.
211+
212+
```cs
213+
[ModuleInitializer]
214+
public static void Init() =>
215+
VerifierSettings.IgnoreParameters("arg");
216+
```
217+
<!-- endInclude -->
202218

203219

204220
### Instance

docs/parameterised-tunit.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,23 @@ For the fluent case:
143143

144144
* NamerTests.IgnoreParametersForVerifiedFluent_arg=One.received.txt
145145
* NamerTests.IgnoreParametersForVerifiedFluent_arg=Two.received.txt
146-
* NamerTests.IgnoreParametersForVerifiedFluent.verified.txt<!-- endInclude -->
146+
* NamerTests.IgnoreParametersForVerifiedFluent.verified.txt
147+
148+
149+
### Static IgnoreParameters
150+
151+
`VerifierSettings.IgnoreParameters()` can be used to globally ignore specific parameters (by name) for all tests. This is useful when a parameter is non-deterministic or irrelevant to the verified output across the entire test suite. It must be called before any test runs, typically in a `[ModuleInitializer]`.
152+
153+
When passing an empty list, all parameters will be ignored. When passing specific parameter names, only those parameters will be excluded from the verified filename. Parameters that do not exist on a given test method are silently skipped.
154+
155+
The received files still contain all parameter values.
156+
157+
```cs
158+
[ModuleInitializer]
159+
public static void Init() =>
160+
VerifierSettings.IgnoreParameters("arg");
161+
```
162+
<!-- endInclude -->
147163

148164

149165
### Instance

docs/parameterised-xunitv3.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,23 @@ For the fluent case:
273273

274274
* NamerTests.IgnoreParametersForVerifiedFluent_arg=One.received.txt
275275
* NamerTests.IgnoreParametersForVerifiedFluent_arg=Two.received.txt
276-
* NamerTests.IgnoreParametersForVerifiedFluent.verified.txt<!-- endInclude -->
276+
* NamerTests.IgnoreParametersForVerifiedFluent.verified.txt
277+
278+
279+
### Static IgnoreParameters
280+
281+
`VerifierSettings.IgnoreParameters()` can be used to globally ignore specific parameters (by name) for all tests. This is useful when a parameter is non-deterministic or irrelevant to the verified output across the entire test suite. It must be called before any test runs, typically in a `[ModuleInitializer]`.
282+
283+
When passing an empty list, all parameters will be ignored. When passing specific parameter names, only those parameters will be excluded from the verified filename. Parameters that do not exist on a given test method are silently skipped.
284+
285+
The received files still contain all parameter values.
286+
287+
```cs
288+
[ModuleInitializer]
289+
public static void Init() =>
290+
VerifierSettings.IgnoreParameters("arg");
291+
```
292+
<!-- endInclude -->
277293

278294

279295
### Instance

src/Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<Project>
33
<PropertyGroup>
44
<NoWarn>CA1822;CS1591;CS0649;xUnit1026;xUnit1013;CS1573;VerifyTestsProjectDir;VerifySetParameters;PolyFillTargetsForNuget;xUnit1051;NU1608;NU1109</NoWarn>
5-
<Version>31.13.5</Version>
5+
<Version>31.14.0</Version>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<LangVersion>preview</LangVersion>
88
<AssemblyVersion>1.0.0</AssemblyVersion>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
value
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
public class IgnoreParametersTests :
2+
BaseTest
3+
{
4+
public IgnoreParametersTests() =>
5+
VerifierSettings.IgnoreParameters("arg");
6+
7+
[Theory]
8+
[InlineData("One")]
9+
[InlineData("Two")]
10+
public Task IgnoreParameters(string arg) =>
11+
Verify("value")
12+
.UseParameters(arg);
13+
}

src/Verify/Naming/FileNameBuilder.cs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,24 @@ public static (Action<StringBuilder>?, Action<StringBuilder>?) GetParameterText(
4747
.Zip(settingsParameters, (name, value) => new KeyValuePair<string, object?>(name, value))
4848
.ToArray();
4949

50-
var ignored = settings.ignoredParameters;
51-
if (ignored?.All(methodParameters.Contains) == false)
50+
var instanceIgnored = settings.ignoredParameters;
51+
if (instanceIgnored?.All(methodParameters.Contains) == false)
5252
{
53-
throw new($"Some of the ignored parameter names ({string.Join(", ", ignored)}) do not exist in the test method parameters ({string.Join(", ", methodParameters)}).");
53+
throw new($"Some of the ignored parameter names ({string.Join(", ", instanceIgnored)}) do not exist in the test method parameters ({string.Join(", ", methodParameters)}).");
54+
}
55+
56+
var ignored = instanceIgnored;
57+
var globalIgnored = VerifierSettings.GlobalIgnoredParameters;
58+
if (globalIgnored is not null)
59+
{
60+
if (ignored is not null)
61+
{
62+
ignored = [..ignored, ..globalIgnored];
63+
}
64+
else
65+
{
66+
ignored = globalIgnored;
67+
}
5468
}
5569

5670
var verifiedValues = GetVerifiedValues(ignored, allValues);

0 commit comments

Comments
 (0)