From 1055caec7193b2903e1c7b20c7e4e85f7f525a83 Mon Sep 17 00:00:00 2001 From: Ivo Stoilov Date: Thu, 14 Sep 2023 15:23:53 +0300 Subject: [PATCH] Test execution hangs unexpectedly o closes telerik/MATTeam#622 --- .../Core/Behaviors/RecursiveMockingBehavior.cs | 10 +++++++--- .../Core/Behaviors/ThrowAsyncExceptionBehavior.cs | 14 +++++++------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/Telerik.JustMock/Core/Behaviors/RecursiveMockingBehavior.cs b/Telerik.JustMock/Core/Behaviors/RecursiveMockingBehavior.cs index 8282374a..93b1d7c5 100644 --- a/Telerik.JustMock/Core/Behaviors/RecursiveMockingBehavior.cs +++ b/Telerik.JustMock/Core/Behaviors/RecursiveMockingBehavior.cs @@ -163,9 +163,9 @@ private object CreateMock(Type returnType, MocksRepository repository, Invocatio ? CreateMock(elementType, repository, invocation) : elementType.GetDefaultValue(); - Expression>> taskFromResult = () => MockingUtil.TaskFromResult((object)null); - mock = ((MethodCallExpression)taskFromResult.Body).Method - .GetGenericMethodDefinition() + var taskFromResultMethod = typeof(MockingUtil).GetMethod("TaskFromResult", BindingFlags.Static | BindingFlags.Public); + + mock = taskFromResultMethod .MakeGenericMethod(elementType) .Invoke(null, new object[] { taskResultValue }); } @@ -189,6 +189,10 @@ private object CreateMock(Type returnType, MocksRepository repository, Invocatio { mock = String.Empty; } + else if (returnType.IsValueType) + { + mock = returnType.GetDefaultValue(); + } else { try diff --git a/Telerik.JustMock/Core/Behaviors/ThrowAsyncExceptionBehavior.cs b/Telerik.JustMock/Core/Behaviors/ThrowAsyncExceptionBehavior.cs index 54c5427c..24008a48 100644 --- a/Telerik.JustMock/Core/Behaviors/ThrowAsyncExceptionBehavior.cs +++ b/Telerik.JustMock/Core/Behaviors/ThrowAsyncExceptionBehavior.cs @@ -18,6 +18,7 @@ limitations under the License. using System; using System.Linq; using System.Linq.Expressions; +using System.Reflection; using System.Threading.Tasks; using Telerik.JustMock.Core.Context; using Telerik.JustMock.Setup; @@ -49,13 +50,12 @@ public void Process(Invocation invocation) var elementType = returnType.IsGenericType && returnType.GetGenericTypeDefinition() == typeof(Task<>) ? returnType.GetGenericArguments()[0] : typeof(object); - Expression>> taskFromException = - () => MockingUtil.TaskFromException((Exception)null); - var mock = - ((MethodCallExpression)taskFromException.Body).Method - .GetGenericMethodDefinition() - .MakeGenericMethod(elementType) - .Invoke(null, new object[] { this.exception }); + + var taskFromException = typeof(MockingUtil).GetMethod("TaskFromException", BindingFlags.Static | BindingFlags.Public); + + var mock = taskFromException + .MakeGenericMethod(elementType) + .Invoke(null, new object[] { this.exception }); var parentMock = invocation.MockMixin; var mockMixin = MocksRepository.GetMockMixin(mock, null);