En ASP.NET, no puede crear una prueba doble de HttpSessionState porque es sealed
. Sí, este es un mal diseño por parte de los diseñadores originales de ASP.NET, pero no hay mucho que hacer al respecto.
Esta es una de las muchas razones por las cuales los TDD'ers y otros profesionales de SOLID han abandonado ASP.NET en gran medida a favor de ASP.NET MVC y otros marcos más comprobables. En ASP.NET MVC, la sesión HTTP se modela mediante la clase abstracta HttpSessionStateBase.
Puede adoptar un enfoque similar y dejar que sus objetos funcionen en una sesión abstracta, y luego ajustar la clase HttpSessionState real cuando se está ejecutando en el entorno ASP.NET. Dependiendo de las circunstancias, incluso puede reutilizar los tipos de System.Web.Abstractions, pero si no, puede definir los suyos propios.
En cualquier caso, su lógica de negocio es su Dominio Modelo y debe modelarse independientemente de cualquier tecnología de tiempo de ejecución particular, por lo que diría que no debería estar accediendo al objeto de sesión en primer lugar.
Si es absolutamente necesario utilizar la prueba de dobles para tets de la unidad implican HttpSessionState, esto sigue siendo posible con ciertas dinámicas burla invasivos, tales como TypeMock o Moles, aunque incluya estos llevan un montón de desventajas también (ver this comparison of dynamic mocks).
Véase también mi respuesta a esta pregunta - http://stackoverflow.com/a/8487847/232593 –