2011-07-21 7 views
1

私は現在、サイトのSiteMinderを実装しています。これは、リクエストヘッダでSM_USERというキーを探します。テストのためにリクエストヘッダーに何かを挿入するにはどうすればよいですか?

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

この機能に関連する機能が動作するかどうかをテストしたいと思います。私は既にモッククラスを使って単体テストを試みましたので、要求ヘッダーにキーSM_USERを作成しようとしています。どうやってやるの?

私はMVC3でアプリケーションを実装しています。

答えて

1

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

関連する問題