【发布时间】:2016-08-06 02:12:34
【问题描述】:
这是我的控制器测试类方法,它将初始化假类
public void InitializeFake()
{
fakeHttpSession = A.Fake<HttpSessionStateBase>();
fakeHttpContext = A.Fake<HttpContextBase>();
nmsFake = A.Fake<INMSPlatformClient>();
isFakeInitialized = true;
fakeHttpSession.Contents["NMCSession"] = new NMCSession()
{
DefaultOrganizationUID = 1,
FirstName = "system",
Login = "sys.admin",
LastName = "Admin",
IsMultiAccountViewable = true,
OrganizationUID = 1,
OrganizationName = "NMC",
};
var fake = (NMCSession)fakeHttpSession.Contents["NMCSession"];
A.CallTo(() => fakeHttpContext.Session).Returns(fakeHttpSession);
A.CallTo(() => fakeHttpSession["NMCSession"]).Returns(fake);
A.CallTo(() => fakeHttpContext.Session).Returns(fakeHttpSession);
ControllerContext = new ControllerContext(fakeHttpContext, new RouteData(), A.Fake<ControllerBase>());
myController = new PlatformOrganizationController(nmsFake);
myController.ControllerContext = ControllerContext;
}
这是我的 NMCSession 课程
public class NMCSession
{
private List<Product> m_products=null;
public string Login { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int OrganizationUID { get; set; }
public string OrganizationName { get; set; }
public string InstitutionCode { get; set; }
public int DefaultOrganizationUID { get; set; }
public string SessionToken { get; set; }
public int UserUID { get; set; }
public int NMCInactivityTimeOut { get; set; }
public bool IsMultiAccountViewable { get; set; }
public List<Product> GetProducts()
{
if(m_products!=null)
return m_products;
else
{
string NMSPlatformSvcUrl = System.Configuration.ConfigurationManager.AppSettings["NMSServerProtocol"] + "://" +
System.Configuration.ConfigurationManager.AppSettings["NMSServerName"] + ":" +
System.Configuration.ConfigurationManager.AppSettings["NMSServerPortNumber"];
HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri(NMSPlatformSvcUrl);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = httpClient.GetAsync("/NMS/Platform/ConfigurationSvc/v1/Status").Result;
if (response.IsSuccessStatusCode)
{
PlatformStatus status = response.Content.ReadAsAsync<PlatformStatus>().Result;
m_products=status.Products;
}
else
{
throw new Exception(response.StatusCode.ToString());
}
rn m_products;
}
}
public bool IsDevelopmentPartner { get; set; }
}
现在问题出在控制器上,用户尝试使用NMCSession.GetProducts(),这给了我异常。
现在我该如何伪造NMCSession中的上述GetProducts()方法调用?
【问题讨论】: