mira en las clases HttpSessionStateBase
y HttpSessionStateWrapper
en System.Web.Abstractions
. HttpSessionStateBase
es la clase abstracta de la cual HttpSessionState
hereda, y HttpSessionStateWrapper
se utiliza para envolver una clase sellada en una clase abstracta, que luego puede simular en sus pruebas.
Muchas de las clases System.Web
están selladas (por ejemplo, HttpSessionState
), por lo que es un verdadero dolor para probar el código cuando tiene métodos y clases que interactúan con ellos. Un patrón que me gusta usar para evitar esto se parece a lo siguiente:
public void DoSomething(HttpSessionState state)
{
// take this HttpSeassionState and create an abstract HttpSessionStateBase
// instance
DoSomething(new HttpSessionStateWrapper(state));
}
internal void DoSomething(HttpSessionStateBase state)
{
// my actual logic for working with the session state
}
El método público es difícil de probar, porque HttpSessionState
está sellado, y no puede burlarse de ella. Sin embargo, el método interno funciona en una instancia HttpSessionStateBase
, que puede simulacro. Tenga en cuenta que lo he marcado como interno porque no quiero que el mundo externo pueda acceder a ese método. Sin embargo, yo hago quieren mis pruebas para poder acceder a esa, así que voy a modificar mis AssemblyInfo.cs incluir algo como esto:
[assembly: InternalsVisibleTo("Vendor.Utilities.Tests")]
Por último, mi prueba para esto sería algo como esto:
[Test]
public void Test_DoSomething()
{
HttpSessionStateBase state = MockRepository.PartialMock<HttpSessionStateBase>();
state.Expect(s => ...);
MyClass.DoSomething(state);
state.VerifyAllExpectations();
}
Espero que ayude. ¡Buena suerte!
Si estás hablando de formularios web, se trata de un duplicado de http://stackoverflow.com/questions/1981426/how-do-i-mock-fake-the-s ession-object-in-asp-net-web-forms – PHeiberg