NUnit2046
Use CollectionConstraint for better assertion messages in case of failure
| Topic | Value |
|---|---|
| Id | NUnit2046 |
| Severity | Info |
| Enabled | True |
| Category | Assertion |
| Code | UseCollectionConstraintAnalyzer |
Description
Use Has.Length/Has.Count/Is.Empty instead of testing property directly.
Motivation
Consider the difference in error message between the following pairs of Asserts:
int[] array = { 1, 2 };
Assert.That(array.Length, Is.EqualTo(1));
Assert.That(array, Has.Length.EqualTo(1));
The first gives: Expected: 1, But was: 2, the second: Expected: property Length equal to 1, But was: 2
making it clear we talking about number of elements, not just a number.
The next example:
int[] array = { 1, 2 };
Assert.That(array.Length, Is.EqualTo(0));
Assert.That(array, Is.Empty);
This results in Expected: 0, But was: 2 in the first case and Expected: <empty>, But was: < 1, 2 > in the second.
int[] array = Array.Empty<int>();
Assert.That(array.Length, Is.GreaterThanOrEqualTo(1));
Assert.That(array, Is.Not.Empty);
This would change: Expected: greater than or equal to 1, But was: 0 into Expected: not <empty>, But was: <empty>
How to fix violations
Replace test on explicit .Length or .Count properties with Has.Length and Has.Count respectively.
If testing against the value 0 use Is.Empty or Is.Not.Empty instead.
Configure severity
Via ruleset file
Configure the severity per project, for more info see MSDN.
Via .editorconfig file
# NUnit2046: Use CollectionConstraint for better assertion messages in case of failure
dotnet_diagnostic.NUnit2046.severity = chosenSeverity
where chosenSeverity can be one of none, silent, suggestion, warning, or error.
Via #pragma directive
#pragma warning disable NUnit2046 // Use CollectionConstraint for better assertion messages in case of failure
Code violating the rule here
#pragma warning restore NUnit2046 // Use CollectionConstraint for better assertion messages in case of failure
Or put this at the top of the file to disable all instances.
#pragma warning disable NUnit2046 // Use CollectionConstraint for better assertion messages in case of failure
Via attribute [SuppressMessage]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Assertion",
"NUnit2046:Use CollectionConstraint for better assertion messages in case of failure",
Justification = "Reason...")]