Как вставить что-то в заголовок запроса для тестирования? - PullRequest
1 голос
/ 21 июля 2011

В настоящее время я внедряю SiteMinder для сайта, который ищет ключ с именем SM_USER в заголовке запроса.Я получаю его, используя функцию ниже:

 public string ReadUser()
 {
    return HttpContext.Current.Request.Headers["SM_USER"];
 }

Я хочу проверить, работает ли функциональность, предоставляемая этой функции;Я уже пробовал модульное тестирование с использованием фиктивного класса, поэтому я ищу, чтобы создать ключ SM_USER в заголовке запроса.Как я могу это сделать?

Я реализую приложение с помощью MVC3.

1 Ответ

1 голос
/ 29 августа 2011

Пока вы используете HttpContext.Current, вы не сможете его протестировать, так как в модуле Test не будет HttpContext.Current.

Попробуйте использовать интерфейс с методом, возвращающим строку, скажем ReadUser (). Реализуйте этот интерфейс в классе в вашем приложении. Используйте переменную интерфейса любого класса, в котором вы используете этот метод. В этом классе конструктор по умолчанию устанавливает значение этой интерфейсной переменной равным «новому» классу реализатора. Добавьте перегрузку конструктора, которая примет параметр типа interface и присвойте этому параметру переменную интерфейса.

Теперь в вашем проекте UnitTest реализуйте тот же интерфейс в другом классе. В этой реализации теперь вы можете пройти любое тестовое значение.

public interface IReadUserInfo
{  string ReadUser();     }

public class ReadUserInfo: IReadUserInfo
{
    public string ReadUser()
    {
       return HttpContext.Current.Request.Headers["SM_USER"];
    }
}


public class UserClass
{
    IReadUserInfo userinfo;

    public UserClass()
    {
        userinfo = new ReadUserInfo();
    }

    public USerClass(IReadUserInfo newuserinfo)
    {
        userinfo = newuserinfo;
    }
}

public class TestReadUserInfo : IReadUSerInfo
{
     public string ReadUser()
     { return "testvalue";  }
}

Если ReadUser - единственное значение, которое вы используете из заголовка запроса, тогда этот подход решит проблему. Однако, если вы используете больше значений из объекта Request, вам может потребоваться смоделировать весь объект запроса аналогичным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...