2013-04-04 42 views
21

空洞在我的測試,我定義爲數據List<IUser>在一些記錄。模擬更新方法返回與起訂量

我想建立一個最小起訂量的梅索德Update,該方法接收用戶idstring進行更新。

然後我得到了IUser和更新屬性LastName

我嘗試這樣做:

namespace Tests.UnitTests 
{ 
    [TestClass] 
    public class UsersTest 
    { 
     public IUsers MockUsersRepo; 
     readonly Mock<IUsers> _mockUserRepo = new Mock<IUsers>(); 
     private List<IUser> _users = new List<IUser>(); 

     [TestInitialize()] 
     public void MyTestInitialize() 
     { 
      _users = new List<IUser> 
       { 
        new User { Id = 1, Firsname = "A", Lastname = "AA", IsValid = true }, 
        new User { Id = 1, Firsname = "B", Lastname = "BB", IsValid = true } 
       }; 

      Mock<IAction> mockUserRepository = new Mock<IAction>(); 
      _mockUserRepo.Setup(mr => mr.Update(It.IsAny<int>(), It.IsAny<string>())) 
       .Returns(???); 

      MockUsersRepo = _mockUserRepo.Object; 
     } 

     [TestMethod] 
     public void Update() 
     { 
      //Use the mock here 
     } 

    } 
} 

但我得到這個錯誤:無法解決返回symbole

你有一個ID ?

class User : IUser 
{ 
    public int Id { get; set; } 
    public string Firsname { get; set; } 
    public string Lastname { get; set; } 
    public bool IsValid { get; set; } 
} 

interface IUser 
{ 
    int Id { get; set; } 
    string Firsname { get; set; } 
    string Lastname { get; set; } 
    bool IsValid { get; set; } 
} 

interface IAction 
{ 
    List<IUser> GetList(bool isActive); 
    void Update(int id, string lastname) 
} 

class Action : IAction 
{ 
    public IUser GetById(int id) 
    { 
     //.... 
    } 
    public void Update(int id, string lastname) 
    { 
     var userToUpdate = GetById(id); 
     userToUpdate.LastName = lastname; 
     //.... 
    } 
} 
+0

什麼是你想測試? – 2013-04-04 08:20:24

+0

我想確定,字段姓氏已被正確更新或不是 – 2013-04-04 08:38:23

+0

@ Kris-I,目前無法通過您的公共界面進行檢查。您可能想要返回更新的用戶或方法中的姓氏。 – 2013-04-04 08:41:09

回答

33

如果你只是想驗證這個方法被調用,你應該使用Verifiable()方法。

_mockUserRepository.Setup(mr => mr.Update(It.IsAny<int>(), It.IsAny<string>())) 
        .Verifiable(); 

如果您還想對這些參數做些什麼,請首先使用Callback()。

_mockUserRepository.Setup(mr => mr.Update(It.IsAny<int>(), It.IsAny<string>())) 
        .Callback((int id, string lastName) => { 
         //do something 
         }).Verifiable(); 

更新

這裏是你應該如何嘲笑它,如果你返回一個布爾值作爲結果。

_mockUserRepository.Setup(mr => mr.Update(It.IsAny<int>(), It.IsAny<string>())) 
        .Returns(true); 
+0

現在有方法在列表中添加一個條目,並檢查列表中是否存在增加值?我可以在'做點什麼'中做些什麼? – 2013-04-04 13:29:11

+1

@ Kris-I我想你會在你正在嘲笑的課程中保留List 。如果是這樣,你不應該關心模擬類的實現。您應該測試使用存儲庫的類。 – 2013-04-04 13:33:59

+0

列表是我的模擬類中可用的數據列表,它只是用於測試的數據。 – 2013-04-04 13:40:50

4
Mock<IUsers> _mockUserRepository = new Mock<IUsers>(); 
     _mockUserRepository.Setup(mr => mr.Update(It.IsAny<int>(), It.IsAny<string>())) 
          .Callback((int id, string name) => 
           { 
            //Your callback method here 
           }); 
//check to see how many times the method was called 
_mockUserRepository.Verify(mr => mr.Update(It.IsAny<int>(), It.IsAny<string>()), Times.Once()); 
+0

希望有一些細節與這段代碼相關!會有幫助。 – Farax 2016-07-08 07:04:52