Rozważmy metodę w zespole .NET:Moq: jednostka testowania metody polegając na HttpContext
public static string GetSecurityContextUserName()
{
//extract the username from request
string sUser = HttpContext.Current.User.Identity.Name;
//everything after the domain
sUser = sUser.Substring(sUser.IndexOf("\\") + 1).ToLower();
return sUser;
}
Chciałbym wywołać tę metodę z badanej jednostki przy użyciu ramy Min. Ten zespół jest częścią rozwiązania formularzy internetowych. Test jednostkowy wygląda tak, ale brakuje mi kodu Moq.
//arrange
string ADAccount = "BUGSBUNNY";
string fullADName = "LOONEYTUNES\BUGSBUNNY";
//act
//need to mock up the HttpContext here somehow -- using Moq.
string foundUserName = MyIdentityBL.GetSecurityContextUserName();
//assert
Assert.AreEqual(foundUserName, ADAccount, true, "Should have been the same User Identity.");
Pytanie:
- Jak mogę używać Min zorganizować sztuczny obiekt HttpContext z jakąś wartość jak 'MojaDomena \ myuser'?
- Jak skojarzyć ten fałszywy z moim wywołaniem w mojej statycznej metody pod numerem
MyIdentityBL.GetSecurityContextUserName()
? - Czy masz jakieś sugestie, jak poprawić ten kod/architekturę?
nie można używać nowego HttpContextBase(), jak jest to abstrakcyjna klasa (jak sama nazwa wskazuje). Musisz użyć nowej metody HttpContextWrapper(). –
Dzięki ... mój mózg był przed moich rąk, kiedy odpowiedziałem, że to;) – womp