どのようにユニットテストにファイルをアップロードするFormCollectionを受信する方法?

StackOverflow https://stackoverflow.com/questions/2327263

質問

私はユニットテストに次のような方法をしたいです

public ActionResult StoreFile(FormCollection form, string _paginaAtual)
{
     Session["MySession"] = 1
     if (Request.Files["uploadedFiles"] != null)
         {
             //do something about the file
         }
     return View()
}

これは、私の「SomeController.cs」コントローラクラス内だと、ユーザは簡単な入力タイプ=「ファイル」HTML入力ます。

でファイルを送信したときに、それが呼ばれます

P.S:純粋主義者は注意してください:。私は、これは「純粋な」ユニットテストではありません知っている、私はテスト環境でメソッドを呼び出すと、それはシステムのデ望ましい変更を行うかどうかを確認したい。

は、すべての被験体における任意の光をありがとう リンクスます。

役に立ちましたか?

解決

彼らはMVCに始まり、System.Web.Abstractions名前空間を作成する前に

幸いにもASP.Netチームはこれについて考えました。それは、伝統的には、HttpWebRequestクラスのようなテストに不可能な静的なクラスをミラーベースクラスのシリーズです。

何がやりたいことは、それらの基底クラスの1つに依存しており、効果的にあなたのセッションを模擬するために、依存性注入の少しを行います。

HttpSessionStateBase _session;
public HttpSessionStateBase Session
{
    get{
        return _session ?? (_session = new HttpSessionStateWrapper(HttpContext.Current.Session));
    }
    set{
        _session = value;
    }
}
FormCollectionとして、あなたは、あなたが離れているHttpContextから1を作成することができるはずとして、それを嘲笑する必要はありません。 マーカスHammarbergのブログ。

他のヒント

あなたはより多くの統合テストのような音を記述しているもの。あなたはそれを隔離したい場合は、あなたのFormCollectionについては、あなたはそれのためにあなた自身のモックを「手ロール」をRhinoMocksのようなアイソレーションフレームワークを使用するか、または可能性があります。

scroll top