Moq: unidad de prueba de un método basado en HttpContext

Considere un método en un ensamblado .NET:

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;      
}

Me gustaría llamar a este método desde una prueba unitaria utilizando el marco Moq. Este ensamblaje es parte de una solución de formularios web. La prueba de la unidad se ve así, pero me falta el código 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.");

Pregunta:

¿Cómo puedo usar Moq para organizar un objeto HttpContext falso con algún valor como 'MyDomain \ MyUser'?¿Cómo asocio esa falsificación con mi llamada a mi método estático enMyIdentityBL.GetSecurityContextUserName()?¿Tiene alguna sugerencia sobre cómo mejorar este código / arquitectura?

Respuestas a la pregunta(6)

Su respuesta a la pregunta