I have a controller that depends on a Session variable. In order to unit test this controller, I came up with the following solution. It works but I'm wondering if there is a better/cleaner way. Thanks
Controller
    public JsonResult UpdateStatus(ImageUpdateStatus imageUpdateStatus, SessionStateItemCollection sessionItems = null)
    {
        var data = new object();
        string status = null;
        ImageInfo imageInfo = new ImageInfo();
        IImageInfoServices svcImageInfo = new ImageInfoServicesRepository();
        imageInfo = svcImageInfo.GetImageByImageId(imageUpdateStatus.ImageId);
        IDeviceControlServices svcDevice = new DeviceControlServicesRespository();
        IPVSCommandServices svcPVSCmds = new PVSCommandServicesRespository();
        if (imageUpdateStatus.Task == "prep")
        {
            List<UpdateReasonForm> updateReasonForms;
            if (sessionItems != null)
            {
                updateReasonForms = sessionItems["UpdateReasonForms"] as List<UpdateReasonForm>;
            }
            else
            {
                updateReasonForms = Session["UpdateReasonForms"] as List<UpdateReasonForm>;
            }
            foreach (var item in updateReasonForms)
            {
                if (item.ImageId == imageInfo.ImageId)
                {
                    status = svcPVSCmds.PrepImage(imageInfo, item.NewVersion);
                }
            }
            data = new
            {
                status
            };
        }
        if (imageUpdateStatus.Task == "boot")
        {
            status = svcDevice.Boot(imageInfo.ImageId);
            data = new
            {
                status
            };
        }
        return this.Json(data, JsonRequestBehavior.AllowGet);
    }
Unit Test
        [TestMethod()]
    public void UpdateStatusTest()
    {
        BuildController target = new BuildController(); // TODO: Initialize to an appropriate value
        ImageUpdateStatus imageUpdateStatus = new ImageUpdateStatus(); // TODO: Initialize to an appropriate value
        imageUpdateStatus.ImageId = 3;
        imageUpdateStatus.Task = "prep";
        UpdateReasonForm updateReasonForm = new UpdateReasonForm();
        updateReasonForm.ImageId = 3;
        updateReasonForm.NewVersion = "TestThis";
        List<UpdateReasonForm> updateReasonForms = new List<UpdateReasonForm>();
        updateReasonForms.Add(updateReasonForm);
        var sessionItems = new SessionStateItemCollection();
        sessionItems["UpdateReasonForms"] = updateReasonForms;
        JsonResult actual;
        actual = target.UpdateStatus(imageUpdateStatus, sessionItems);
    }