【发布时间】:2010-10-18 19:31:34
【问题描述】:
我有一个类可以检索一些内容,并且它有一个在检索之前需要一些输入(过滤器)的方法。其中一个“输入”调用另一个方法,该方法基本上返回一个 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;
}
我只是在寻找一种方法来传递 ClientID 的硬编码值,并使用它对 GetDataClass 类进行一些单元测试。
谢谢。
【问题讨论】:
-
不回答你的问题,因为克劳斯比斯科夫已经做得很好了。但我想说的是,我喜欢使用 AppContext 类而不是“Util”类(它实现了 IAppContext,与 klausbyskov 的回答中的 IUtil 相同)。它存储有关应用程序当前上下文的信息,例如当前用户、当前客户端或您可能需要在整个应用程序中了解的其他活动配置。当然,这都是个人喜好,但我认为 AppContext 类的意图比另一个名为“Utils”的类更清楚。
-
感谢您的建议,不幸的是,这些课程来自不同的团队,并且是我无法更改的“核心”库的一部分!我只是继承它。