public SupportedBrowser GetBrowser()
{
string agent = HttpContext.Current.Request.Headers["User-Agent"];
if (agent.Contains("iPad"))
{
return new iPad();
}
else
return new InternetExplorer7();
}
私は、上記の方法の単位テストをMicrosoft単体テストツール(MS-Test?)を使用してセットアップしました。単体テストはWebサイトではないので、HttpContextはありません。HttpContextを使用した単体テスト方法
A.オプションのパラメータ:GetBrowser(bool debug = false)
を追加します。これにより、現在のコードをリファクタなしで実行することができます。次に、デバッグが真であるときに、モックコンテキストまたはハードコードされたユーザエージェントを作成するためのメソッドを変更します。
B.追加依存性注入。他の場所からコンテキストを取得します。しかし、私はこれを自動化するためには、私はIoCに落とす必要があると思う。それはたくさんの仕事です。
あなたはこれらのアイデアを改善したり改善したりすることはできますか?
注:このメソッドは、クラスライブラリに格納されています。私はそれをそのままにしたい。
DI(依存性注入)を支持するために+1 – Nauman
私はDIが好きですが、私の質問に載せているように、これはかなりうまくいくと思います。 HttpContext.Request.UserAgentは読み取り専用なので、テスト用に設定することはできません。私はここでmallows98の答えに類似したものを使ってすべてを出す必要があるかもしれません。http://stackoverflow.com/questions/1452418/how-do-i-mock-the-httpcontext-in-asp-net-mvc-using-moqその経路を避けようとしています。 –
コンテキストを挿入しないで、エージェントストリングを挿入してください。それはあなたにそれを完全にコントロールさせるでしょう。 –