public static void AssertIsNotInvokedDuringNSubstituteQuery(IInvocation invocation, Func <Type, GenerationRequest, object> instanceSource) { var interceptedInvocation = new InterceptedInvocation(invocation, instanceSource); if (interceptedInvocation.IsPropertyGetter()) { return; } try { var assembly = AppDomain.CurrentDomain.GetAssemblies().SingleOrDefault(a => a.FullName.StartsWith("NSubstitute,") && a.CodeBase.EndsWith("NSubstitute.dll")); if (assembly != null) { if (assembly.SubstitutionContextClass().Current().ThreadContext().IsQuerying()) { throw new AnyInstanceUsedInsteadOfNSubstituteDuringAQueryException(); } } } catch (AnyInstanceUsedInsteadOfNSubstituteDuringAQueryException) { throw; } catch (Exception e) { Console.WriteLine($"NSubstitute hack could not be processed because {e}"); } }
public void SetupReturnValueFor( IInvocation invocation, Func <Type, GenerationRequest, object> instanceSource, GenerationRequest request) { var interceptedInvocation = new InterceptedInvocation(invocation, instanceSource); if (interceptedInvocation.HasReturnValue()) { interceptedInvocation.GenerateAndAddMethodReturnValueTo(_cache, request); } else if (interceptedInvocation.IsPropertySetter()) { interceptedInvocation.GenerateAndAddPropertyGetterReturnValueTo(_cache); } }