2010-02-24 7 views
5

Ben Birimi-testine gibi bir yöntem istiyorum aşağıdadır:Dosya yüklemek için FormCollection alan bir yöntemi nasıl birim olarak test edebilirim?

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

Benim "SomeController.cs" denetleyici sınıfının içeride ve kullanıcı basit bir input type = "file" bir dosyayı gönderdiğinde denir HTML girişi

P.S .: Purists dikkat: Bu bir "saf" birim testi değil, sadece bir test ortamında yöntemi aramak ve sistemde istenen değişiklikler yapıp yapmadığını kontrol etmek istiyorum.

Konuyla ilgili herhangi bir ışık için hepinize teşekkür ederiz, Lynx.

cevap

3

Neyse ki, ASP.Net ekibi, MVC'ye başlamadan ve System.Web.Abstractions ad alanını oluşturmadan önce bunu düşündü. HttpWebRequest sınıfı gibi geleneksel olarak test edilemeyen statik sınıfları yansıtan bir dizi temel sınıftır.

Yapmak istediğiniz şey, bu temel sınıflardan birine güvenmek ve oturumunuzu etkili bir şekilde gerçekleştirmek için biraz bağımlılık enjeksiyonu yapmaktır.

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

formcollection gelince, bir HttpContext dışında bir tane oluşturmak mümkün olması gerektiği gibi, bunu alay etmek gerekmez. Marcus Hammarberg's blog'da bunun iyi bir örneği var.

+0

Güzel, benim oturumu alay! alay olamazdı Ama nasıl "formcollection" alay ediyorsun –

+0

soru sonunda güncellenmiş şeyler görmek? Ben formcollection = ( – Josh

0

Tanımlama sınaması, daha çok tümleştirme sınaması gibidir. FormKoleksiyonunuza gelince, onu izole etmek istiyorsanız, RhinoMocks gibi bir yalıtım çerçevesi kullanabilir veya bunun için kendi aldatmacasını "elden geçirebilirsiniz".

+0

Çok kötü –

İlgili konular