Andrei a raison - il est nul car lors de l'exécution sous le framework ASP.NET MVC, HttpContext (et donc HttpContext.Session) n'est pas défini lorsque la classe de contrôleur est construite comme vous pouvez vous y attendre, mais il est défini ("injecté") plus tard par la classe ControllerBuilder. Si vous voulez une meilleure compréhension du cycle de vie, vous pouvez soit dérouler le framework ASP.NET MVC (la source est disponible), soit vous référer à: cette page
Si vous avez besoin d'accéder à la session, une façon serait de remplacer la méthode "OnActionExecuting" et d'y accéder, car elle sera disponible à ce moment-là.
Cependant, comme le suggère Andrei, si votre code dépend de la session, il pourrait être difficile d'écrire des tests unitaires, vous pourriez peut-être envisager d'encapsuler la session dans une classe d'assistance qui peut ensuite être échangée contre une autre, non- version web lors de l'exécution sous tests unitaires, donc découpler votre contrôleur du web.