这是我的控制器测试类方法,它将初始化假类
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()
,这会让我感到异常。
现在我如何伪造GetProducts()
中的上述NMCSession
方法调用?
答案 0 :(得分:0)
至少,您需要使用假冒NMCSession
。在测试中,您将实例化具体的NMCSession
。另请注意,除非GetProducts
是虚拟的,否则FakeItEasy将无法拦截调用,因此将使用原始实现。