Andrei ha ragione: è nullo perché durante l'esecuzione nel framework ASP.NET MVC, HttpContext (e quindi HttpContext.Session) non è impostato quando la classe controller è costruita come ci si potrebbe aspettare, ma viene impostata ("iniettata") in seguito dalla classe ControllerBuilder. Se desideri una migliore comprensione del ciclo di vita, puoi eseguire il pull down del framework ASP.NET MVC (la fonte è disponibile) o fare riferimento a: questa pagina
Se è necessario accedere alla sessione, un modo sarebbe sovrascrivere il metodo "OnActionExecuting" e accedervi da lì, poiché sarà disponibile da quel momento.
Tuttavia, come suggerisce Andrei, se il tuo codice fa affidamento sulla sessione, potrebbe essere potenzialmente difficile scrivere test unitari, quindi forse potresti considerare di racchiudere la sessione in una classe helper che può quindi essere sostituita con una diversa, non versione web durante l'esecuzione in unit test, quindi scollega il tuo controller dal web.