2010-02-24 35 views
5

Tôi muốn Đơn vị kiểm tra một phương pháp như sau:Làm thế nào để kiểm tra đơn vị một phương thức nhận FormCollection để tải lên một tệp?

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

Đó là bên trong "SomeController.cs" lớp điều khiển của tôi và nó được gọi khi người dùng gửi một tập tin trong một loại đầu vào đơn giản = "file" Đầu vào HTML.

P.S .: Purists hãy cẩn thận: Tôi BIẾT đây không phải là thử nghiệm đơn vị "thuần túy", tôi chỉ muốn gọi phương thức trong môi trường thử nghiệm và kiểm tra xem nó có tạo ra những thay đổi mong muốn trong hệ thống hay không.

Cảm ơn tất cả mọi ánh sáng trong chủ thể, Lynx.

Trả lời

3

May mắn là nhóm ASP.Net đã nghĩ về điều này trước khi họ bắt đầu vào MVC và tạo không gian tên System.Web.Abstractions. Nó là một loạt các lớp cơ sở phản ánh các lớp tĩnh không thể kiểm tra theo truyền thống như lớp HttpWebRequest.

Những gì bạn muốn làm là dựa vào một trong các lớp cơ sở đó và thực hiện một chút tiêm phụ thuộc để có hiệu quả giả lập phiên của bạn.

HttpSessionStateBase _session; 
public HttpSessionStateBase Session 
{ 
    get{ 
     return _session ?? (_session = new HttpSessionStateWrapper(HttpContext.Current.Session)); 
    } 
    set{ 
     _session = value; 
    } 
} 

Vì đối với FormCollection, bạn không phải giả mạo nó, vì bạn có thể tạo một phần ngoài HttpContext. Có một ví dụ điển hình về điều đó trên Marcus Hammarberg's blog.

+0

Nice, tôi thử phiên của tôi! Nhưng Làm thế nào để chế nhạo là "FormCollection"? –

+0

thấy những thứ được cập nhật vào cuối của câu hỏi – Josh

0

Điều bạn mô tả âm thanh giống như thử nghiệm tích hợp hơn. Đối với FormCollection của bạn, nếu bạn muốn cô lập nó, bạn có thể sử dụng một khung cách ly như RhinoMocks, hoặc "cuộn tay" của riêng bạn giả cho nó.

+0

Thật tệ, tôi không thể thử FormCollection = ( –

Các vấn đề liên quan