2010-08-06 38 views
5

我必須爲這種方法編寫單元測試,但我無法構建HttpPostedFileBase ...當我從瀏覽器運行該方法時,它運行良好,但我確實需要一個自動化的單元測試。所以我的問題是:我如何構建HttpPosterFileBase以將文件傳遞給HttpPostedFileBase。如何構建HttpPostedFileBase?

謝謝。

public ActionResult UploadFile(IEnumerable<HttpPostedFileBase> files) 
    { 
     foreach (var file in files) 
     { 
      // ... 
     } 
    } 

回答

6

如何做這樣的事情:

public class MockHttpPostedFileBase : HttpPostedFileBase 
{ 
    public MockHttpPostedFileBase() 
    { 

    } 
} 

那麼你可以創建一個新的連接:asp.net MVC

MockHttpPostedFileBase mockFile = new MockHttpPostedFileBase(); 
2

就我而言,我使用的核心登記核心網頁界面,並通過RPC webservice和unittest。在這種情況下,爲HttpPostedFileBase定義自定義封裝很有用:

public class HttpPostedFileStreamWrapper : HttpPostedFileBase 
{ 
    string _contentType; 
    string _filename; 
    Stream _inputStream; 

    public HttpPostedFileStreamWrapper(Stream inputStream, string contentType = null, string filename = null) 
    { 
     _inputStream = inputStream; 
     _contentType = contentType; 
     _filename = filename; 
    } 

    public override int ContentLength { get { return (int)_inputStream.Length; } } 

    public override string ContentType { get { return _contentType; } } 

    /// <summary> 
    /// Summary: 
    ///  Gets the fully qualified name of the file on the client. 
    /// Returns: 
    ///  The name of the file on the client, which includes the directory path. 
    /// </summary>  
    public override string FileName { get { return _filename; } } 

    public override Stream InputStream { get { return _inputStream; } } 


    public override void SaveAs(string filename) 
    { 
     using (var stream = File.OpenWrite(filename)) 
     { 
      InputStream.CopyTo(stream); 
     } 
    }