Mock контекста при юнит тестировании

Проект ASP под .Net Framework Есть класс теста, тестирует методы HomeController : BaseController

HomeController использует поле _siteSecurityContext, а объявлено оно в BaseController Где и как оно инжектируется - не знаю, проект для меня новый и большой - навскидку в поиске по коду не нашёл

Что мне нужно: чтобы в момент вызова тестируемого метода из класса теста поле _siteSecurityContext был проинициализировано, но к этому моменту оно null. Пробовал "мокать" его по-разному с помощью фреймворка Moq - не помогает

class MethodXXXTest
{
    private readonly _c;
    MethodXXXTest()
    {
         _c = HomeController(_xService, _yService...... ещё 8 заинжектенных 
          сервисов)
    }

     public void CheckXXXTest()
     {
          ///
          ///
          ///
          _c.CheckXXX(/// - тестируемый метод
     }   
}


public class HomeController : BaseController
{
    public HomeController()
    {
       // заинжектенные сервисы
    }
    public void CheckXXXTest()
    {   // должно быть не null, сейчас null
        _siteSecurityContext.Foo(... 
    }
}


public abstract class BaseController : Controller, ...
{
    // тут он объявлен
    protected SiteSecurityContext _siteSecurityContext {get; set;} - 
    инжектится непонятно где. его надо за мокать из класса теста
}

Ответы (1 шт):

Автор решения: PashaPash

Самый простой вариант, если найти место инжекта слишком тяжело, или если не хочется дергать дополнительную логику - паттерн Public Morozov под флагом Conditional:

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Diagnostics;

namespace UnitTestProject1
{
    public class HomeController : BaseController
    {
        public HomeController()
        {
            // заинжектенные сервисы
        }

        [Conditional("DEBUG")]
        public void Debug_SetSecurityContext(SiteSecurityContext context)
        {
            _siteSecurityContext = context;
        }

        public void CheckXXXTest()
        {   // должно быть не null, сейчас null
            _siteSecurityContext.Foo();
    }
    }


    public abstract class BaseController
    {
        // тут он объявлен
        protected SiteSecurityContext _siteSecurityContext { get; set; }
    }

    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            // Arrange
            var controller = new HomeController();
            var context = new SiteSecurityContext();

            controller.Debug_SetSecurityContext(context);

            // Act
            controller.CheckXXXTest();

            // Assert
            // TODO: проверить результаты вызова
        }
    }
}
→ Ссылка