2011-04-26 82 views
0

可能重複:
What are the differences between mocks and stubs on Rhino Mocks?存根和模擬實現

我使用單位的嘲笑testing..But我不能在執行代碼模擬和存根的區別 模擬實現代碼是: -

[TestFixture] 
    public class MockUser 
    { 
     [Test] 
     public void SaveValidUserFileNameUsingMock() 
     { 
      UserMock um = new UserMock(); 
      um.uName = ""; 
      um.fName = "sfs.jpg"; 
      um.ContentType = "image/jpg"; 
      IUser usr = um; 
      Assert.AreEqual("E:/image/kawade.jpg", usr.Save(um)); 
     } 
    } 

    public class UserMock : IUser 
    { 
     public string uName; 
     public string fName; 
     public string ContentType; 

     public string Save(IUser u) 
     { 
      if (uName == "" || fName == "") 
      { 
       throw new ArgumentException("missing field name"); 
      } 

      if (ContentType.Contains("image")) 
      { 
       string ext = Path.GetExtension(fName); 
       return (string.Format("E:/image/{0}", this.uName + ext)); 
      } 
      return "invalid"; 
     } 
    } 


     public interface IUser 
     { 
      string Save(IUser u); 
     } 

and the class測試是: -

public class User 
    { 
     public string uName; 
     public string fName; 
     //private IUser usr; 

     public void Save(FileUpload fu, User usr) 
     { 
      if (uName == null || fName == null) 
      { 
       throw new ArgumentException("missing field name"); 
      } 

      if (fu.PostedFile.ContentType.Contains("image")) 
      { 
       string ext = Path.GetExtension(fName); 
       fu.SaveAs(string.Format("E:/image{0}", this.fName + ext)); 
      } 
     } 

和相同的類正在用於存根測試。存根測試代碼是: -

[TestFixture] 
    public class UserTest 
    { 
     [Test] 
     public void SaveUserValidFile() 
     { 
      UserStub su = new UserStub(); 
      su.uName = "kawade"; 
      su.fileName = "sfgs.png"; 
      su.Contenttype = "image/x-png"; 
      su.pName = "sdskjh"; 
      IUser target = su; 

     } 
    } 

    internal class UserStub : IUser 
    { 
     public string uName; 
     public string pName; 
     public string Contenttype; 
     public string fileName; 


     public string Save(IUser u) 
     { 
      if (uName == null || pName == null) 
      { 
       throw new ArgumentException("user_name or pic_name is required"); 
      } 

      if (Contenttype.Contains("image")) 
      { 
       string ext = Path.GetExtension(fileName); 
       //return string.Format("C:/test/{0}", this.uName + ext); 
       Assert.AreEqual("C:/Test/kawade.png", target.Save(su)); 
      } 
      return ""; 
     } 
    } 

    public interface IUser 
    { 
     string Save(IUser u); 
    } 

請有人讓我知道存根和模擬之間的差異,它在上面的代碼實現..

+2

@Mitch小麥:如果你是Google的話,這與你無關。 (幾乎)***如果搜索時間夠長,可以找到所有的***。要麼回答問題,要麼將其作爲重複關閉。我們在這裏確實想要提出問題併成爲編程問題的第一站點,是嗎? – jgauffin 2011-04-26 08:09:51

+0

@ jgauffin:我花了5秒鐘。比創建他的問題所需的海報少很多時間。順便說一句,我已經投票結束了作爲一個騙局。我建議你這樣做。 – 2011-04-26 08:17:40

+2

@Mitch小麥:如果你在5秒內發現它並不重要。所有的編程問題都應該受到歡迎,即使它很容易在谷歌中找到。我現在投票結束這個問題。 – jgauffin 2011-04-26 08:21:17

回答

1

存根:東西給你一個股票的答案,或者至多,屬性包的行爲或方法什麼都不做,但必須返回void。

虛假:給你上演行爲的東西,所以你可以人爲地測試該類客戶端的一些場景。模擬:可以編程以在不同的時間給出不同的響應,它被稱爲的東西。如果你想要調用它們被調用的順序,它會給你控制權。大多數模擬框架也給你存根功能。

以上各項的部分變體:通過僞造,可以包裝存根,另一個僞造,模擬或實際實現,並僅對特定參數做某些操作。