簡體   English   中英

使用lambda表達式設置方法

[英]Setting up methods by using lambda expressions

我試圖通過使用相應的lambda表達式偽造一個實例上的方法:

private void TranslateCallbackToSetup<TResult>(Mock<TService> stubService, IMethodCall<TService,TResult> methodCall)
{
    stubService.Setup(t => methodCall.RunMethod(t)).Returns(() =>
    {                
         return default(TResult);
    });
}

public interface IMethodCall<in TService, out TResult> : IMethodCall where TService : class
{
    Func<TService, TResult> RunMethod { get; }
}

語法似乎很好,但代碼失敗並帶有ArgumentException:

表達式不是方法調用:t => t

有什么想法嗎?

這是失敗的,因為你試圖在mock本身以外的東西上設置一個方法。

您說當您使用stubService作為參數調用RunMethod方法時,您希望IMethodCall實例返回特定值。 在這種情況下,您需要傳入模擬IMethodCall ,因為這是您正在定義的行為的對象。

如果你看一下這里的例子,你會發現所有被模擬的方法都是mock上的方法。 因此,如果您可以重構TService類型以取代methodCall,那么您可以使其工作。

在你的服務上

public IService 
{
     TResult ExecuteMethodCall(IMethodCall<IService, TResult>);
}

然后在你的測試中

stubService.Setup(t => t.ExecuteMethodCall(methodCall))

暫無
暫無

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

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