MODIFIED:代碼使用HttpRequest.InputStream來讀取請求體,解析並存儲它。我希望能夠對這個班級進行單元測試,但是我不能將任何東西粘到身體上。那可能嗎?也許我可以以某種方式直接反思A類,並設置_body一些價值。如何將自定義輸入流粘貼到HttpRequest.InputStream中?
新增:這裏是簡化的設計:
class A
{
private string _body;
public string Body { get { return _body; } }
public A(HttpRequest r)
{
{parse r and store data, i.e. query parameter, etc. }
_body = {read body from r.InputStream };
}
}
class B
{
public void ProcessRequest(HttpRequest r)
{
var c = new C(r);
ParseBody(c.Body);
}
}
這一切都很好,我確實可以測試ParseBody即使它是私有的。不過,我是單元測試A類,這就是問題所在。我可以使身體R/W屬性,但這是破壞封裝,我討厭,因爲A應該是不變的。
感謝您的回答。他們都是偉大的建議,但我繼承的代碼看起來像上面。也許我不需要使用InputStream,但可能以某種方式破解使用類。 – Schultz9999 2011-01-28 17:14:16
我把所有東西都翻出來,通過構造函數提供流來擺脫內部依賴關係(context.HttpRequest.InputStream)。 – Schultz9999 2011-01-28 21:39:43