2013-03-27 104 views
0

我是新來的犀牛製品創建測試用例,我需要編寫一個單元測試用例以下方法:使用犀牛嘲笑爲嘲諷一個WebClient的方法

public string PutFileInArchive(string fileName, string userId, string mimeType, byte[] fileContents, IocContainer container) 
    { 
     string archiveId; 

     try 
     { 
      IArchiveService _archiveService = container.Resolve<IArchiveService>(); 
      archiveId = _archiveService.Archive(fileName, mimeType, userId, fileContents); 
     } 
     catch (Exception ex) 
     {    
      throw; 
     } 

     return archiveId; 
    } 

上述方法在內部調用web客戶端方法,我需要嘲笑。我創建了一個存根,但我不確定如何使用它。我的方法總是調用實際的webclient方法。

[TestMethod()] 
    public void Archive_PutFileInArchive_ShouldPut() 
    { 
     StreamReader reader = new StreamReader("C:\\File.txt"); 
     MemoryFile file = new MemoryFile(reader.BaseStream, "string", "File.txt"); 

     HttpPostedFileBase postedFile = file; 

     var fileContents = new byte[file.ContentLength]; 
      file.InputStream.Read(fileContents, 0, file.ContentLength); 

     IFileArchiveService fileArchiveService = MockRepository.GenerateMock<IFileArchiveService>(); 

     fileArchiveService.Stub(x => x.Archive("File.txt", "text/plain", "webuser1", fileContents)).Repeat.Once().Return("12345"); 

     Archive archive = new Archive(); 
     string fileid = archive.PutFileInArchive("File.txt", "webuser1", "text/plain", fileContents, container); 

     Assert.AreEqual("12345", fileid); 
    } 

請讓我知道如何在這種情況下使用模擬。

回答

0

您的方法正在調用實際的webclient方法,因爲實際的webclient在容器中註冊爲IFileArchiveService的實現。

要使用存根相反,你需要把fileArchiveServicecontainerIFileArchiveService實現調用archive.PutFileInArchive()
如前

container.RegisterInstance<IFileArchiveService>(fileArchiveService); 
string fileid = archive.PutFileInArchive("File.txt", "webuser1", "text/plain", fileContents, container); 

其實,我會建議使用不同的容器進行測試和應用程序。

+0

謝謝@Alexander Stepaniuk。這解決了它。 – 2013-03-28 18:00:26