我有一个类,它执行一些内容检索,并且它有一个方法需要一些输入(过滤器)才能检索它。其中一个“输入”调用另一个方法,基本上返回一个int,我如何使用MOQ来嘲笑它?这里有一个例子:如何嘲笑返回一个int与MOQ的方法
namespace MyNamespace
{
public class ConfigMetaDataColumns : MyModel
{
public int FieldID { get { return ValueInt("FieldID"); } }
public int OrderId { get { return ValueInt("OrderId"); } }
public string Label { get { return ValueString("Label"); } }
public string FieldName { get { return ValueString("FieldName"); } }
public int IsReadOnly { get { return ValueInt("IsReadOnly"); } }
}
public class GetDataClass
{
protected OpenSQLAccessLayer m_WITObject;
// Input Properties
public string GroupID;
public string PageName;
// Output Properties
/// <summary>
/// Get Config meta data
/// </summary>
/// <returns></returns>
public IEnumerable<ConfigMetaDataColumns> GetConfigMetaData()
{
var requester = new ListRequester<OpenSQL, ConfigMetaDataColumns>(m_WITObject, "Result[0].RowCount", "Result[0].Row[{0}].");
return requester.Items;
}
public void InitRequest()
{
User user = (User)HttpContext.Current.User;
m_WITObject = user.NewService<OpenSQLAccessLayer>();
m_WITObject.SetInput("MultipleResultSets", 1);
m_WITObject.SetInput("ClientID", Utils.GetClientID());
m_WITObject.SetInput("GroupID", GroupID);
m_WITObject.SetInput("PageName", PageName);
m_WITObject.Retrieve();
}
}
}
这是“GetClientID()”方法:
public static int GetClientID()
{
User oUser = (User)HttpContext.Current.User;
int nClientID;
string sClientID = string.Empty;
if (String.IsNullOrEmpty(oUser.Session("clientid")))
{
Client oClient = new Client();
}
oUser = (User)HttpContext.Current.User;
sClientID = oUser.Session("clientid");
//If we couldn't retrieve it, throw exception
if (string.IsNullOrEmpty(sClientID) || !int.TryParse(sClientID, out nClientID))
{
throw new Exception("No clientid found in user session, client not authenticated, please login from main page");
}
return nClientID;
}
我只是在寻找一种方式,让我在一个硬编码值传递的客户端ID,并使用它对GetDataClass类进行一些单元测试。
谢谢。
没有回答你的问题,因为克劳斯比斯科夫已经做了很好的工作。但我想说,而不是一个“Util”类,我喜欢使用一个AppContext类(它实现IAppContext,这与klausbyskov的答案中的IUtil相同)。这存储了有关应用程序当前上下文的信息,例如当前用户,当前客户端或您在整个应用程序中可能需要知道的其他活动配置。这当然是个人偏好,但我认为AppContext类的意图比另一个名为“Utils”的类更清晰。 – NerdFury 2010-10-18 19:56:24
感谢您的建议,不幸的是,这些课程来自不同的团队,也是我无法改变的“核心”库的一部分!我只是从它继承而来。 – Saxman 2010-10-18 21:40:30