2016-10-25 57 views
1

我正在編寫單元測試用例,我必須根據所需的參數返回多個響應。當我嘗試下面的代碼時它的工作正常。無法使用NUnit模擬的setupSequence的多個返回

_mockClient.SetupSequence(c => c.HttpGet(It.IsAny<string>(), It.IsAny<Dictionary<string, string>>())) 
    .Returns(new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(_bucketResponseJson) }) 
    .Returns(new HttpResponseMessage()); 

但是,當我的響應取決於傳遞參數我使用以下代碼與lambda表達式。

_mockClient.SetupSequence(c => c.HttpGet(It.IsAny<string>(), It.IsAny<Dictionary<string, string>>())) 
       .Returns(((string url, Dictionary<string, string> headers) => 
       { 
        return _objectStoreCache[headers[HeaderValue]] as HttpResponseMessage; 
       })).Returns(new HttpResponseMessage()); 

這給了我編譯錯誤

「無法轉換lambda表達式類型 'System.Net.Http.HttpResponseMessage',因爲它不是委託 型」

+0

如果有什麼錯誤?什麼是所需的功能?提供更多詳細信息 – Nkosi

+0

即使沒有您的問題的基本描述,我也看不出我們可以提供什麼幫助。 – Amy

+0

修改了這個問題,請參閱更多詳細信息。 –

回答

3

您在設置中嘗試執行的操作無法完成,因爲ISetupSequentialResult<TResult>不允許使用lambda表達式,而是將具體值傳遞給Returns方法。也沒有允許該功能的擴展方法。

public interface ISetupSequentialResult<TResult> { 
    //... 

    // Summary: 
    //  Returns value 
    ISetupSequentialResult<TResult> Returns(TResult value); 

    //... 
} 
+0

你想讓我實現上面的界面嗎? –

+0

不是。該接口是從'SetupSequence'返回的內容。只是顯示Returns方法不允許委託。 – Nkosi