HttpContext.Currentを使用している限り、ユニットテストには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オブジェクトからより多くの値を使用している場合、同様の方法で要求オブジェクト全体をモックしたいかもしれません。