From 65f0e45f204f9adb8357480d9f812b3632501738 Mon Sep 17 00:00:00 2001 From: Jeff Dammeyer Date: Wed, 7 Aug 2019 12:14:55 -0500 Subject: [PATCH] fix: Don't attempt to set CallBase on auto-generated mocks for delegates --- CHANGELOG.md | 1 + src/Moq/MockDefaultValueProvider.cs | 5 +++- .../Regressions/IssueReportsFixture.cs | 29 +++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8eaa9cb99..ca7cbff8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ The format is loosely based on [Keep a Changelog](http://keepachangelog.com/en/1 #### Fixed * Regression: `SetupAllProperties` can no longer set up properties whose names start with `Item`. (@mattzink, #870; @kaan-kaya, #869) +* Regression: `MockDefaultValueProvider` will no longer attempt to set `CallBase` to true for mocks generated for delegates. (@dammejed, #874) ## 4.12.0 (2019-06-20) diff --git a/src/Moq/MockDefaultValueProvider.cs b/src/Moq/MockDefaultValueProvider.cs index 6ed283fc6..630798e2c 100644 --- a/src/Moq/MockDefaultValueProvider.cs +++ b/src/Moq/MockDefaultValueProvider.cs @@ -36,7 +36,10 @@ protected override object GetFallbackDefaultValue(Type type, Mock mock) var mockType = typeof(Mock<>).MakeGenericType(type); Mock newMock = (Mock)Activator.CreateInstance(mockType, mock.Behavior); newMock.DefaultValueProvider = mock.DefaultValueProvider; - newMock.CallBase = mock.CallBase; + if(!type.IsDelegate()) + { + newMock.CallBase = mock.CallBase; + } newMock.Switches = mock.Switches; return newMock.Object; } diff --git a/tests/Moq.Tests/Regressions/IssueReportsFixture.cs b/tests/Moq.Tests/Regressions/IssueReportsFixture.cs index 87c7e6292..54c416db8 100644 --- a/tests/Moq.Tests/Regressions/IssueReportsFixture.cs +++ b/tests/Moq.Tests/Regressions/IssueReportsFixture.cs @@ -2713,6 +2713,35 @@ public abstract partial class HttpContext #endregion + #region 874 + public class Issue874 + { + [Fact] + public void MockDefaultValueProvider_will_Propagate_Callbase_to_nondelegates() + { + var mock = new Mock>>() + { + CallBase = true, + DefaultValue = DefaultValue.Mock + }; + var mockedIndexResult = mock.Object["foo"]; + Assert.Null(mockedIndexResult["foo"]); + } + + [Fact] + public void MockDefaultValueProvide_will_not_propagate_Callback_to_delegates() + { + var mock = new Mock>>() + { + CallBase = true, + DefaultValue = DefaultValue.Mock + }; + var mockedIndexResult = mock.Object["foo"]; + Assert.Null(mockedIndexResult()); + } + } + #endregion + // Old @ Google Code #region #47