アップロードされたファイルを処理するコントローラーアクションがASP.NETMVCにあります。Request.Files.Count
ただし、 MvcContribを使用しているときに呼び出す方法はないようTestControllerBuilder
です。
抽象化することでこれを回避できることを私は知っていますRequest.Files
。私の質問は次のとおりです。
Request.Files.Count
使用時に直接呼び出す方法がないのは確かTestControllerBuilder
ですか?それとも私は何か間違ったことをしていますか?- Rhino Mocksの使用
Request.Files.Count
中に呼び出しをスタブ化する方法はありますか?TestControllerBuilder
Request.Files.Count
MvcContribに処理のリクエストまたはパッチを送信する必要があると思いますか?
コード例:
コレクションに少なくとも1つのファイルがあることを確認したいRequest.Files
ので、アクションに次の条件があります。
public class MyController : Controller {
public ActionResult Upload() {
if (Request.Files == null || Request.Files.Count == 0)
ViewData.ModelState.AddModelError("File", "Please upload a file");
// do stuff
return View();
}
}
from MvcContribを使用しTestControllerBuilder
て、コントローラーテスト用のテストダブルを作成しています。ただし、への呼び出しはRequest.Files.Count
常に例外をスローするようです。たとえば、次のNUnitテストを実行するNotImplementedException
と、tocontroller.Upload()
の呼び出し中にRequest.Files.Count
:がスローされます。
[Test]
public void Upload_should_return_default_view_given_one_file() {
MyController controller = new MyController();
TestControllerBuilder controllerBuilder = new TestControllerBuilder();
controllerBuilder.InitializeController(controller);
controllerBuilder.Files["file"] =
MockRepository.GenerateStub<HttpPostedFileBase>();
var result = controller.Upload() as ViewResult;
Assert.That(result.ViewData.ModelState.IsValid, Is.True);
result.AssertViewRendered().ForView(string.Empty);
}
また、呼び出しをスタブ化してRequest.Files.Count
無駄にしようとしました(Rhino Mocksを使用しています)。以下のいずれも機能しません(スタブに変更controller
したり、スタブに変更したりcontrollerBuilder
しても):
controllerBuilder.Stub(cb => cb.HttpContext.Request.Files.Count).Return(1);
controller.Stub(c => c.Request.Files.Count).Return(1);
ありがとう