Модульные тесты MS для доступа к закрытым методам и членам базового класса - PullRequest
1 голос
/ 05 марта 2010

Сегодня я столкнулся с проблемой, когда я не могу вызвать ControllerContext в моем контроллере в рамках метода модульного тестирования MS при доступе через закрытый метод. Например

//This is my controller and private GetUsers() method
public class SampleController : Controller
{
        private IEnumerable<Users> GetUsers()
        {
            try
            {
                string cacheKey = "UserKey";
                IList<User> users;

                if (this.HttpContext.Cache[cacheKey] != null)
                {
                    users= (IList<User>)this.HttpContext.Cache[cacheKey];
                }
                else
                {
                    users= UserService.GetUsers();

                    if (users!= null)
                    {
                        this.HttpContext.Cache.Insert(cacheKey, users, null, DateTime.Now.AddDays(1), Cache.NoSlidingExpiration);
                    }
                }

                return UserExtensions.GetModifiedUsers(users);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

}

//In Unit Tests

[TestMethod]
public void SampleTestMethod()
{
      SampleController_Accessor privateAcc = new SampleController_Accessor();
      privateAcc.ControllerContext //Which is not availble intelliSense ???????????
}

Есть ли способ получить доступ к ControllerContext без значительного изменения контроллера в методе модульного теста?

Мне нужен ControllerContext, чтобы я мог установить макет HttpContext для контроллера

Я пытался

((SampleController)privateAcc).ControllerContext = this.GetControllerContext();

Но компилятор выдает ошибку.

Любые идеи с благодарностью.

Ответы [ 2 ]

0 голосов
/ 05 марта 2010

Этот код на самом деле не тестируется на модуле - слишком много зависимостей от статических данных. Напишите интеграционный тест и назовите его день или разбейте его на два класса: один, который получает статические данные, а другой, который выполняет любые необходимые преобразования.

Возможно, вам удастся использовать «сильные» насмешливые рамки, такие как TypeMock, но я их не люблю.

0 голосов
/ 05 марта 2010
...