Closed Schaeri closed 6 years ago
@Schaeri, I hope you don't mind, but I'm closing this issue for now. We've been tracking this problem mostly over at the Castle Core issue tracker, and it's looking as if this might be a problem within the runtime / JIT. The way things are, I don't expect that there's anything we can do in Moq. If, however, we discover that the problem is indeed caused by Moq, I'll happily reopen this.
We have a very strange problem in our project when running unit tests. In very rare cases some tests fail with TypeLoadException or MissingMethodException when calling mocked methods. The tests which are failing are never the same. It is absolutely random which test will fail. We have approximately 25000 Tests. Every 20 build fails with such an error on a single unit test. We run our tests with xunit 2.1 in parallel, all in the same app domain. Our moq version is 4.2.1510.2205.
We try to reproduce the error by accessing moq and castle in parallel from several threads but were never able to reproduce the issue on a simple example. We also tried to create simple unit test example projects without any luck.
Any idea what can cause our problem? Thanks for the help.
Sample Type Load Exception: Erowa.EMC.Machines.FileIO.JobProgramsProcessorTest.ProcessPrograms_MustReturnProcessedPartProgram [FAIL] System.TypeLoadException : Could not load type 'Castle.Proxies.Invocations.IMocked_get_Mock' from assembly 'DynamicProxyGenAssembly2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=a621a9e7e5c32e69'. Stack Trace: at Castle.Proxies.IEmcFileProxy.get_Mock() at Moq.Proxy.InterfaceProxy.ToString() at Moq.ExpressionStringBuilder.ToStringConstant(ConstantExpression c) at Moq.ExpressionStringBuilder.ToString(Expression exp) at Moq.ExpressionStringBuilder.AsCommaSeparatedValues[T](IEnumerableb 1b()
at Moq.PexProtector.Invoke[T](Func
1 source, Action
1 toStringAction) at Moq.ExpressionStringBuilder.ToStringMethodCall(MethodCallExpression node) at Moq.ExpressionStringBuilder.ToString(Expression exp) at Moq.ExpressionStringBuilder.ToStringLambda(LambdaExpression lambda) at Moq.ExpressionStringBuilder.ToString(Expression exp) at Moq.ExpressionStringBuilder.ToString() at Moq.ExpressionExtensions.ToStringFixed(Expression expression, Boolean useFullTypeName) at Moq.Interceptor.AddCall(IProxyCall call, SetupKind kind) at Moq.Mock.<>cDisplayClass1c`2.1 function) at Moq.Mock.Setup[T,TResult](Mock
1 mock, Expression`1 expression, Condition condition) Machines\FileIO\JobProgramsProcessorTest.cs(130,0): at Erowa.EMC.Machines.FileIO.JobProgramsProcessorTest.SetupProgramProcessor(IEmcFile inputProgram) Machines\FileIO\JobProgramsProcessorTest.cs(91,0): at Erowa.EMC.Machines.FileIO.JobProgramsProcessorTest.ProcessPrograms_MustReturnProcessedPartProgram()Sample Missing Method Exception: [10:55:32][Step 1/1] xUnit.net Tests [10:55:32][xUnit.net Tests] Erowa.EMC.Results.ResultBuilderTest.WithActionIf_MustConfigureIfBranch [10:55:32][Erowa.EMC.Results.ResultBuilderTest.WithActionIf_MustConfigureIfBranch] System.MissingMethodException : Method not found: 'Void Castle.Proxies.Invocations.IResultBuilder_WithAction..ctor(Erowa.EMC.Results.IResultBuilder, System.Object, Castle.DynamicProxy.IInterceptor[], System.Reflection.MethodInfo, System.Object[])'. [10:55:32] [Erowa.EMC.Results.ResultBuilderTest.WithActionIf_MustConfigureIfBranch] at Castle.Proxies.IResultBuilderProxy.WithAction[TAction](Actionb0(IResultBuilder ifScope) in C:\BuildAgent\work\bf1bb0868d3bd9db\net\source\Erowa.EMC.Foundation\Results\ResultBuilder.cs:line 99
at Erowa.EMC.Results.ResultBuilderTest.<>cDisplayClass16_0.b1(Funcb 7(Object[] args)
at Moq.MethodCall.Execute(ICallContext call)
at Moq.MethodCallReturn
1 executionAction) at Erowa.EMC.Results.ResultBuilder.<>c__DisplayClass15_0
1.1 condition, Action
1 ifConfigure, Action1 elseConfigure) in C:\BuildAgent\work\bf1bb0868d3bd9db\net\source\Erowa.EMC.Foundation.Test\Results\ResultBuilderTest.cs:line 165 at Castle.Proxies.IResultBuilderProxy.WithAction[TAction](Action
1 executionAction) at Erowa.EMC.Results.ResultBuilder.<>cDisplayClass15_01.<WithActionIf>b__0(IResultBuilder ifScope) in C:\BuildAgent\work\bf1bb0868d3bd9db\net\source\Erowa.EMC.Foundation\Results\ResultBuilder.cs:line 99 at Erowa.EMC.Results.ResultBuilderTest.<>c__DisplayClass16_0.<WithActionIf_MustConfigureIfBranch>b__1(Func
1 condition, Action1 ifConfigure, Action
1 elseConfigure) in C:\BuildAgent\work\bf1bb0868d3bd9db\net\source\Erowa.EMC.Foundation.Test\Results\ResultBuilderTest.cs:line 165 at Moq.Extensions.InvokePreserveStack(Delegate del, Object[] args) at Moq.MethodCall.<>cDisplayClass8.2.Execute(ICallContext call) at Moq.ExecuteCall.HandleIntercept(ICallContext invocation, InterceptorContext ctx, CurrentInterceptContext localctx) at Moq.Interceptor.Intercept(ICallContext invocation) at Moq.Proxy.CastleProxyFactory.Interceptor.Intercept(IInvocation invocation) at Castle.DynamicProxy.AbstractInvocation.Proceed() at Castle.Proxies.IBranchingResultFactoryProxy.IfElse(Func
1 condition, Action1 ifConfigure, Action
1 elseConfigure) at Erowa.EMC.Results.ResultBuilder.If(Func1 condition, Action
1 ifConfigure) in C:\BuildAgent\work\bf1bb0868d3bd9db\net\source\Erowa.EMC.Foundation\Results\ResultBuilder.cs:line 77 at Erowa.EMC.Results.ResultBuilder.WithActionIf[TAction](Func1 condition, Action
1 executionAction) in C:\BuildAgent\work\bf1bb0868d3bd9db\net\source\Erowa.EMC.Foundation\Results\ResultBuilder.cs:line 99 at Erowa.EMC.Results.ResultBuilderTest.WithActionIf_MustConfigureIfBranch() in C:\BuildAgent\work\bf1bb0868d3bd9db\net\source\Erowa.EMC.Foundation.Test\Results\ResultBuilderTest.cs:line 16