Skip to content

Commit

Permalink
Improve Assert.That error text message (#4702)
Browse files Browse the repository at this point in the history
* Add "matching items" to message

* Add unit test to cover "no matching items" use-case
  • Loading branch information
iamdmitrij committed May 2, 2024
1 parent 3525df5 commit db4a99f
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@ public override void WriteActualValueTo(MessageWriter writer)
{
if (_itemList is null || _itemList.Count == 0)
{
writer.Write("no items");
writer.Write("no matching items");
return;
}

writer.Write(_matchCount != 1 ? "{0} items " : "{0} item ", _matchCount);
writer.Write(_matchCount != 1 ? "{0} matching items " : "{0} matching item ", _matchCount);
writer.Write(MsgUtils.FormatCollection(_itemList));
}
}
Expand Down
22 changes: 16 additions & 6 deletions src/NUnitFramework/tests/Constraints/ExactCountConstraintTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,22 @@ public void ZeroItemsMatch()
Assert.That(Names, Has.Exactly(0).EqualTo("Sam"));
}

[Test]
public void ZeroItemsMatchWithEmptyCollectionFails()
{
var expectedMessage =
TextMessageWriter.Pfx_Expected + "exactly one item equal to \"Charlie\"" + Environment.NewLine +
TextMessageWriter.Pfx_Actual + "no matching items" + Environment.NewLine;
var ex = Assert.Throws<AssertionException>(() => Assert.That(Array.Empty<string>(), Has.Exactly(1).EqualTo("Charlie")));
Assert.That(ex?.Message, Does.Contain(expectedMessage));
}

[Test]
public void ZeroItemsMatchFails()
{
var expectedMessage =
TextMessageWriter.Pfx_Expected + "no item equal to \"Charlie\"" + Environment.NewLine +
TextMessageWriter.Pfx_Actual + "2 items < \"Charlie\", \"Fred\", \"Joe\", \"Charlie\" >" + Environment.NewLine;
TextMessageWriter.Pfx_Actual + "2 matching items < \"Charlie\", \"Fred\", \"Joe\", \"Charlie\" >" + Environment.NewLine;
var ex = Assert.Throws<AssertionException>(() => Assert.That(Names, new ExactCountConstraint(0, Is.EqualTo("Charlie"))));
Assert.That(ex?.Message, Does.Contain(expectedMessage));
}
Expand All @@ -39,7 +49,7 @@ public void ExactlyOneItemMatchFails()
{
var expectedMessage =
TextMessageWriter.Pfx_Expected + "exactly one item equal to \"Charlie\"" + Environment.NewLine +
TextMessageWriter.Pfx_Actual + "2 items < \"Charlie\", \"Fred\", \"Joe\", \"Charlie\" >" + Environment.NewLine;
TextMessageWriter.Pfx_Actual + "2 matching items < \"Charlie\", \"Fred\", \"Joe\", \"Charlie\" >" + Environment.NewLine;
var ex = Assert.Throws<AssertionException>(() => Assert.That(Names, new ExactCountConstraint(1, Is.EqualTo("Charlie"))));
Assert.That(ex?.Message, Does.Contain(expectedMessage));
}
Expand Down Expand Up @@ -76,7 +86,7 @@ public void ExactlyTwoItemsMatchFails()
{
var expectedMessage =
TextMessageWriter.Pfx_Expected + "exactly 2 items equal to \"Fred\"" + Environment.NewLine +
TextMessageWriter.Pfx_Actual + "1 item < \"Charlie\", \"Fred\", \"Joe\", \"Charlie\" >" + Environment.NewLine;
TextMessageWriter.Pfx_Actual + "1 matching item < \"Charlie\", \"Fred\", \"Joe\", \"Charlie\" >" + Environment.NewLine;
var ex = Assert.Throws<AssertionException>(() => Assert.That(Names, new ExactCountConstraint(2, Is.EqualTo("Fred"))));
Assert.That(ex?.Message, Does.Contain(expectedMessage));
}
Expand All @@ -98,7 +108,7 @@ public void ExactlyOneItemNoPredicateFails()
{
var expectedMessage =
TextMessageWriter.Pfx_Expected + "exactly one item" + Environment.NewLine +
TextMessageWriter.Pfx_Actual + "4 items < \"Charlie\", \"Fred\", \"Joe\", \"Charlie\" >" + Environment.NewLine;
TextMessageWriter.Pfx_Actual + "4 matching items < \"Charlie\", \"Fred\", \"Joe\", \"Charlie\" >" + Environment.NewLine;
var ex = Assert.Throws<AssertionException>(() => Assert.That(Names, new ExactCountConstraint(1)));
Assert.That(ex?.Message, Does.Contain(expectedMessage));
}
Expand Down Expand Up @@ -132,7 +142,7 @@ public void OutputStringTestWithTenItems()
+ "exactly 5 items"
+ Environment.NewLine
+ TextMessageWriter.Pfx_Actual
+ "10 items < \"Alfa\", \"Bravo\", \"Charlie\", \"Delta\", \"Echo\", \"Foxtrot\", \"Golf\", \"Hotel\", \"India\", \"Juliett\" >"
+ "10 matching items < \"Alfa\", \"Bravo\", \"Charlie\", \"Delta\", \"Echo\", \"Foxtrot\", \"Golf\", \"Hotel\", \"India\", \"Juliett\" >"
+ Environment.NewLine;

var ex = Assert.Throws<AssertionException>(() => Assert.That(longElementList, Has.Exactly(5).Items));
Expand All @@ -155,7 +165,7 @@ public void OutputStringTestWithMoreAsTenItems()
+ "exactly 10 items"
+ Environment.NewLine
+ TextMessageWriter.Pfx_Actual
+ "15 items < \"Alfa\", \"Bravo\", \"Charlie\", \"Delta\", \"Echo\", \"Foxtrot\", \"Golf\", \"Hotel\", \"India\", \"Juliett\"... >"
+ "15 matching items < \"Alfa\", \"Bravo\", \"Charlie\", \"Delta\", \"Echo\", \"Foxtrot\", \"Golf\", \"Hotel\", \"India\", \"Juliett\"... >"
+ Environment.NewLine;

var ex = Assert.Throws<AssertionException>(() => Assert.That(longElementList, Has.Exactly(10).Items));
Expand Down

0 comments on commit db4a99f

Please sign in to comment.