Пока вы используете 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, вам может потребоваться смоделировать весь объект запроса аналогичным образом.