2013-09-23 36 views
4

我想知道是否有人可以提供幫助。我創建了自己的IHttpClient,所以我可以使用moq來模擬HttpClient。工作得很好,但有一個名爲DetaultRequestHeaders的內部對象,它有一個名爲Authorization的屬性。.NET:HttpClient使用我的接口IHttpClient嘲笑它,但是有一個內部對象是NULL並且它被密封

我在我的構造函數或接受注入IHttpClient的類中設置此值,當然在運行時一切正常。但是,使用單元測試我得到一個錯誤說

Object reference not set to instance.... 

這是由於事實DefaultRequestHeaders爲空。

現在inverstigating這進一步看來,它的類型是

HttpRequestHeaders 

的,但它是一個密封類,所以我甚至不能做到這一點

.Setup(x => x.DefaultRequestHeaders).Returns(return new HttpRequestHeaders()) 

有誰有這方面的經驗後, ?

這是接口定義

HttpRequestHeaders DefaultRequestHeaders { get; } 

在此先感謝

回答

-1

您在Returns方法調用語法顯示不正確。 HttpRequestHeaders是密封類的事實不應該影響是否可以從存根方法調用中返回它的實例。嘗試將該呼叫更改爲Returns(new HttpRequestHeaders());Returns(() => new HttpRequestHeaders());

如果這不起作用(或具體實現HttpRequestHeaders在某種程度上不適合您的需求),您可能需要嘗試一個可以模擬密封類的框架,可能是Moles或JustMock。

+4

「類型‘System.Net.Http.Headers.HttpRequestHeaders’沒有定義構造函數」。它的構造函數都是內部的。 – stannius

1

HttpRequestHeaders只有內部構造。 但是你可以通過創建HttpRequestMesssage對象做到這一點:

var message = new HttpRequestMessage(); 
.Setup(x => x.DefaultRequestHeaders).Returns(message.Headers); 
相關問題