From bd7ebaf490d265d9ba03cf99494873f080ce4cfc Mon Sep 17 00:00:00 2001 From: stakx Date: Sat, 17 Aug 2019 17:06:07 +0200 Subject: [PATCH] Uninvoke `SequenceSetup` on `mock.Invocations.Clear()` (#896) * Add failing test: `mock.Invocations.Clear()` does not reset sequence setups * Fix test by specializing `SequenceSetup.Uninvoke()` --- src/Moq/SequenceSetup.cs | 5 +++++ tests/Moq.Tests/InvocationsFixture.cs | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Moq/SequenceSetup.cs b/src/Moq/SequenceSetup.cs index 78ec62c0d..559871f10 100644 --- a/src/Moq/SequenceSetup.cs +++ b/src/Moq/SequenceSetup.cs @@ -98,6 +98,11 @@ public override MockException TryVerifyAll() return this.invoked ? null : MockException.UnmatchedSetup(this); } + public override void Uninvoke() + { + this.invoked = false; + } + private readonly struct Response { private readonly ResponseKind kind; diff --git a/tests/Moq.Tests/InvocationsFixture.cs b/tests/Moq.Tests/InvocationsFixture.cs index 2739e5e45..094153131 100644 --- a/tests/Moq.Tests/InvocationsFixture.cs +++ b/tests/Moq.Tests/InvocationsFixture.cs @@ -130,7 +130,7 @@ public void Invocations_for_object_methods_on_interface_proxy_record_return_valu } [Fact] - public void Invocations_Clear_also_resets_setup_verification_state() + public void Invocations_Clear_also_resets_setup_verification_state_of_regular_setups() { var mock = new Mock(); mock.Setup(m => m.CompareTo(default)); @@ -142,6 +142,19 @@ public void Invocations_Clear_also_resets_setup_verification_state() Assert.Equal(MockExceptionReasons.UnmatchedSetup, ex.Reasons); } + [Fact] + public void Invocations_Clear_also_resets_setup_verification_state_of_sequence_setups() + { + var mock = new Mock(); + mock.SetupSequence(m => m.CompareTo(default)); + _ = mock.Object.CompareTo(default); + mock.VerifyAll(); // ensure setup has been matched + + mock.Invocations.Clear(); + var ex = Assert.Throws(() => mock.VerifyAll()); + Assert.Equal(MockExceptionReasons.UnmatchedSetup, ex.Reasons); + } + [Fact] [Obsolete()] public void Invocations_Clear_resets_count_kept_by_setup_AtMost()