![](/img/trans.png)
[英]How to await an async private method invoked using reflection in WinRT?
[英]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.