簡體   English   中英

如何在.net中存根通過反射調用的方法

[英]How to stub a method invoked via reflection in .net

我有一個基類,如下所示:

public Base<TReceiver, TRequest, TResponse>
    where TReceiver : class
    where TRequest : class, new()
    where TResponse : class, new()
{    
    private readonly TReceiver _receiver;
    public TRequest Request { get; set; }
    public TResponse Response { get; set; }

    protected Base(TReceiver receiver)
    {
        _receiver = receiver;
    }

    public void CallReceiver()
    {
        var receiverType = _receiver.GetType();
        var executeMethod = receiverType.GetMethod(ExecuteMethodName);
        Response = (TResponse) executeMethod.Invoke(_receiver, new object[] {Request});
    }

    protected abstract string ExecuteMethodName { get; }
}

派生類如下所示:

public class Derived : BaseCommand<IReceiver, DerivedRequest, DerivedResponse>
{
    public Derived (IReceiver receiver)
        : base(receiver)
    {
    }

    protected override string ExecuteMethodName
    {
        get { return "Execute"; }
    }
}

這是IReceiver接口:

public interface IReceiver
{
   DerivedResponse Execute(DerivedRequest request);
}

是否可以在IReceiver實現中存根Execute方法?

提前致謝!

我發現了一個錯誤)此代碼是正確的:

public void CallReceiver()
{
    var receiverType = typeof(TReceiver);
    var executeMethod = receiverType.GetMethod(ExecuteMethodName);
    Response = (TResponse) executeMethod.Invoke(_receiver, new object[] {Request});
}

然后,我可以像這樣對接收器進行存根:

var receiverStub = MockRepository.GenerateStub<IReceiver>();
receiverStub.Stub(x => x.Execute(new DerivedRequest())).IgnoreArguments().Return(new DerivedResponse());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM