Вот мой тестовый контроллер метод класса, который будет инициализировать фальшивый класссталкивается проблема при Тринге поддельного метода в классе
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
?
Я пытался подделать NMCSession. См. Отредактированный код. Но я не уверен, как получить данные для «GetProducts». Любой другой способ? Я применил реализацию метода GetProducts. –
В ответ вы только что повторили метод GetProducts. Вы все еще делаете конкретную «NMCSession» (в 'fakeHttpSession.Contents [" NMCSession "] = new NMCSession()'), поэтому вызывается первоначальная реализация. Если вы хотите подделать «NMCSession», вам нужно будет сделать «A.Fake». И чтобы обеспечить собственное поведение для GetProducts, GetProducts будет виртуальным. –