我寫在C#asp.net MVC3項目,我有一個助手類,看起來像這樣:靜態輔助阻止我單元測試
using System.Collections.Generic;
using System.Web;
namespace CoPrice.Helpers
{
public static class Messages
{
public static IList<Message> All
{
get
{
var list = ((IList<Message>)HttpContext.Current.Session["_messages"]) ?? new List<Message>();
HttpContext.Current.Session["_messages"] = new List<Message>();
return list;
}
}
public static bool Exists
{
get
{
return (((IList<Message>)HttpContext.Current.Session["_messages"]) ?? new List<Message>()).Count > 0;
}
}
public static void Add(MessageType type, string message)
{
Message m = new Message
{
Type = type,
Text = message
};
HttpContext.Current.Session["_messages"] = HttpContext.Current.Session["_messages"] as List<Message> ?? new List<Message>();
((IList<Message>)HttpContext.Current.Session["_messages"]).Add(m);
}
public enum MessageType
{
Info,
Success,
Error
}
public struct Message
{
public MessageType Type;
public string Text;
}
}
}
然而,當我嘗試在測試中使用它們會崩潰(原因是HttpContext.Current beeing null)。我如何在測試和應用程序本身中完成這項工作?我不介意必須改變這個類來使用別的不是HttpContext.Current來訪問會話,但我希望它具有屬性,因此它不能將會話對象作爲參數。
關於如何解決這個問題的任何想法?
爲什麼單身是不好的很好的例子。 – Andrey 2011-05-12 22:25:38
好吧,Singeltons並不總是壞。 – Alxandr 2011-05-12 22:26:33
爲什麼很難測試會話變量的很好的例子 – Jason 2011-05-12 23:01:02