单元测试 IInterceptionBehavior

Unit testing an IInterceptionBehavior

我正在尝试测试 IInterceptionBehavior:

的实现
public class LoggingInterceptorBehavior : IInterceptionBehavior
{

    public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
    {
        var methodBase = input.MethodBase;

        /* ... */

        return getNext()(input, getNext);
    }

    public IEnumerable<Type> GetRequiredInterfaces() { /* ... */ }

    public bool WillExecute { get { return true; } }
}

如何制作假的 MethodBase

诀窍似乎是,相当复杂地,使用反射获取 MethodHandle,然后将其传递到 MethodBase class:

之外的静态方法
var methodHandle = dummyClass.GetType().GetMethod("dummyMethod").MethodHandle;

var methodBase = MethodBase.GetMethodFromHandle(methodHandle);

这对我来说似乎是错误的。你在这里似乎需要的是一个相当集成的测试,你可以通过使用它来测试整个东西,然后检查它是否在日志中记录了一些东西(或者拦截器的目的是什么)。您可以创建一个容器,注册一个虚拟测试 class,在其上执行一个方法,让拦截器拦截该方法,等等。您得到了手势。