diff --git a/Docs/pages/advanced-features/03-monitor-interactions.md b/Docs/pages/advanced-features/03-monitor-interactions.md new file mode 100644 index 00000000..8386e9c0 --- /dev/null +++ b/Docs/pages/advanced-features/03-monitor-interactions.md @@ -0,0 +1,35 @@ +# Monitor interactions + +Mockolate tracks all interactions with mocks on the mock object. To only track interactions within a given scope, you +can use a `MockMonitor`: + +```csharp +var sut = Mock.Create(); + +sut.Dispense("Dark", 1); // Not monitored +var monitorScope = sut.MonitorMock(out var monitor); +using (monitorScope) +{ + sut.Dispense("Dark", 2); // Monitored +} +sut.Dispense("Dark", 3); // Not monitored + +// Verifications on the monitor only count interactions during the lifetime scope of the `IDisposable` +monitor.Verify.Invoked.Dispense(It.Is("Dark"), It.IsAny()).Once(); +``` + +## Clear all interactions + +For simpler scenarios you can directly clear all recorded interactions on a mock using `ClearAllInteractions` on the +setup: + +```csharp +var sut = Mock.Create(); + +sut.Dispense("Dark", 1); +// Clears all previously recorded interactions +sut.SetupMock.ClearAllInteractions(); +sut.Dispense("Dark", 2); + +sut.VerifyMock.Invoked.Dispense(It.Is("Dark"), It.IsAny()).Once(); +``` diff --git a/Docs/pages/advanced-features/03-check-for-unexpected-interactions.md b/Docs/pages/advanced-features/04-check-for-unexpected-interactions.md similarity index 92% rename from Docs/pages/advanced-features/03-check-for-unexpected-interactions.md rename to Docs/pages/advanced-features/04-check-for-unexpected-interactions.md index c3474f37..0ecae54f 100644 --- a/Docs/pages/advanced-features/03-check-for-unexpected-interactions.md +++ b/Docs/pages/advanced-features/04-check-for-unexpected-interactions.md @@ -1,6 +1,6 @@ # Check for unexpected interactions -## ThatAllInteractionsAreVerified +## That all interactions are verified You can check if all interactions with the mock have been verified using `ThatAllInteractionsAreVerified`: @@ -12,7 +12,7 @@ bool allVerified = sut.VerifyMock.ThatAllInteractionsAreVerified(); This is useful for ensuring that your test covers all interactions and that no unexpected calls were made. If any interaction was not verified, this method returns `false`. -## ThatAllSetupsAreUsed +## That all setups are used You can check if all registered setups on the mock have been used using `ThatAllSetupsAreUsed`: diff --git a/Mockolate.slnx b/Mockolate.slnx index 1b917480..4cbf5818 100644 --- a/Mockolate.slnx +++ b/Mockolate.slnx @@ -51,7 +51,8 @@ - + + diff --git a/README.md b/README.md index 922c859d..3a0ddf3c 100644 --- a/README.md +++ b/README.md @@ -736,9 +736,45 @@ sut.SetupMock.Property.TotalDispensed.OnGet .Do((count, value) => Console.WriteLine($"Read #{count}, value: {value}")); ``` +### Monitor interactions + +Mockolate tracks all interactions with mocks on the mock object. To only track interactions within a given scope, you +can use a `MockMonitor`: + +```csharp +var sut = Mock.Create(); + +sut.Dispense("Dark", 1); // Not monitored +var monitorScope = sut.MonitorMock(out var monitor); +using (monitorScope) +{ + sut.Dispense("Dark", 2); // Monitored +} +sut.Dispense("Dark", 3); // Not monitored + +// Verifications on the monitor only count interactions during the lifetime scope of the `IDisposable` +monitor.Verify.Invoked.Dispense(It.Is("Dark"), It.IsAny()).Once(); +``` + +#### Clear all interactions + +For simpler scenarios you can directly clear all recorded interactions on a mock using `ClearAllInteractions` on the +setup: + +```csharp +var sut = Mock.Create(); + +sut.Dispense("Dark", 1); +// Clears all previously recorded interactions +sut.SetupMock.ClearAllInteractions(); +sut.Dispense("Dark", 2); + +sut.VerifyMock.Invoked.Dispense(It.Is("Dark"), It.IsAny()).Once(); +``` + ### Check for unexpected interactions -#### ThatAllInteractionsAreVerified +#### That all interactions are verified You can check if all interactions with the mock have been verified using `ThatAllInteractionsAreVerified`: @@ -750,7 +786,7 @@ bool allVerified = sut.VerifyMock.ThatAllInteractionsAreVerified(); This is useful for ensuring that your test covers all interactions and that no unexpected calls were made. If any interaction was not verified, this method returns `false`. -#### ThatAllSetupsAreUsed +#### That all setups are used You can check if all registered setups on the mock have been used using `ThatAllSetupsAreUsed`: