Andrei tiene razón: es nulo porque cuando se ejecuta bajo el marco ASP.NET MVC, HttpContext (y por lo tanto HttpContext.Session) no se establece cuando la clase de controlador se construye como cabría esperar, pero se establece ("inyecta") más tarde por la clase ControllerBuilder. Si desea una mejor comprensión del ciclo de vida, puede desplegar el marco ASP.NET MVC (la fuente está disponible) o consultar: esta página
Si necesita acceder a la sesión, una forma sería anular el método "OnActionExecuting" y acceder allí, ya que estará disponible en ese momento.
Sin embargo, como sugiere Andrei, si su código depende de la sesión, entonces podría ser potencialmente difícil escribir pruebas unitarias, por lo que tal vez podría considerar envolver la sesión en una clase auxiliar que luego se puede cambiar por una diferente, no versión web cuando se ejecuta bajo pruebas unitarias, por lo tanto, desacopla su controlador de la web.