我設置從這裏的示例中,這模擬會話對象:How to MOQ an Indexed property如何正確模擬HttpSessionStateBase中的KeysCollection?
/// <summary>
/// HTTP session mockup.
/// </summary>
internal sealed class HttpSessionMock : HttpSessionStateBase
{
private readonly Dictionary<string, object> objects = new Dictionary<string, object>();
public override object this[string name]
{
get { return (objects.ContainsKey(name)) ? objects[name] : null; }
set { objects[name] = value; }
}
}
一些示例代碼,以產生誤差...
var mockSession = new HttpSessionMock();
var keys = mockSession.Keys;
錯誤:的方法或操作未實現。
我需要實現Keys屬性,但不能創建KeysCollection對象。
這樣做的最好方法是什麼?
編輯:[解決方法]
我最終改變基礎上給出了答案HttpSessionMock。這是我結束了。 (我還添加了對System.Linq的引用)。
internal sealed class HttpSessionMock : HttpSessionStateBase
{
private readonly NameValueCollection objects = new NameValueCollection();
public override object this[string name]
{
get { return (objects.AllKeys.Contains(name)) ? objects[name] : null; }
set { objects[name] = (string)value; }
}
public override NameObjectCollectionBase.KeysCollection Keys
{
get { return objects.Keys; }
}
}
注意:這個模擬會話將只存儲字符串,而不是對象。
雖然代碼來自Moq問題,但該解決方案不使用Moq庫。我建議刪除Moq標籤。 – TrueWill
Moq標籤已移除。 – joelnet
當我嘗試將bool放入其中時,這個模擬/假冒事件爆炸了。我發現了一個適用於此的代碼片段:http://stackoverflow.com/questions/524457/how-do-you-mock-the-session-object-collection-using-moq – 2012-04-02 18:21:26