Andrei ma rację - ma wartość null, ponieważ podczas uruchamiania w ramach ASP.NET MVC HttpContext (a tym samym HttpContext.Session) nie jest ustawiana, gdy klasa kontrolera jest konstruowana zgodnie z oczekiwaniami, ale jest ustawiana („wstrzykiwana”) później przez klasę ControllerBuilder. Jeśli chcesz lepiej zrozumieć cykl życia, możesz rozwinąć strukturę ASP.NET MVC (źródło jest dostępne) lub zapoznać się z: tą stroną
Jeśli potrzebujesz dostępu do sesji, jednym ze sposobów byłoby zastąpienie metody „OnActionExecuting” i dostęp do niej, ponieważ będzie ona dostępna do tego czasu.
Jednak, jak sugeruje Andrei, jeśli twój kod jest zależny od sesji, wtedy pisanie testów jednostkowych może być trudne, więc być może warto rozważyć umieszczenie sesji w klasie pomocniczej, którą można następnie zamienić na inną, wersja internetowa podczas uruchamiania w ramach testów jednostkowych, dlatego należy odłączyć kontroler od sieci.