public void ModifyType() { var fakeAssemblyAdviceDeclarations = new[] { ObjectMother.GetAdviceBuilder() }; var fakeTypeAdviceDeclarations = new[] { ObjectMother.GetAdviceBuilder() }; var fakeMethodAdviceDeclarations = new[] { ObjectMother.GetAdviceBuilder() }; var allAdviceBuilders = fakeAssemblyAdviceDeclarations .Concat(fakeTypeAdviceDeclarations) .Concat(fakeMethodAdviceDeclarations); _adviceDeclarationProviderMock.Expect(x => x.GetDeclarations()).Return(fakeAssemblyAdviceDeclarations.AsOneTime()); _adviceDeclarationProviderMock.Expect(x => x.GetDeclarations(_mutableType)).Return(fakeTypeAdviceDeclarations.AsOneTime()); foreach (var method in _mutableType.GetMethods()) { var method1 = method; var fakeAdvices = method.Name == "ToString" ? new[] { ObjectMother.GetAdvice() } : new Advice[0]; _adviceDeclarationProviderMock .Expect(x => x.GetDeclarations(method)) .Return(fakeMethodAdviceDeclarations); _adviceComposerMock .Expect( x => x.Compose( Arg <IEnumerable <IAdviceBuilder> > .List.Equal(allAdviceBuilders), Arg <JoinPoint> .Matches(y => y.Member == method1))) .Return(fakeAdvices.AsOneTime()); if (method.Name == "ToString") { _weaverMock .Expect(x => x.Weave(Arg <MethodInfo> .Is.Anything, Arg.Is(fakeAdvices))) .WhenCalled(x => { var mutableMethod = (MutableMethodInfo)x.Arguments[0]; Assert.That(mutableMethod.Name, Is.EqualTo(method.Name)); }); } } _assembler.ModifyType(_mutableType); _adviceDeclarationProviderMock.VerifyAllExpectations(); _adviceComposerMock.VerifyAllExpectations(); _weaverMock.VerifyAllExpectations(); }