2017-09-27 125 views
-2

我需要一些幫助來測試一個void方法。有人可以解釋無效方法如何與測試一起工作。moq testing void方法刪除

我的服務是這樣的:

public void DeleteUser(int userId) 
{ 
    var user = _dbcontext.Users.FirstOrDefault(usr => usr.Id == userId); 
    { 
     if (user != null) 
     { 
      _dbcontext.Users.Remove(user); 
     } 

    _dbcontext.SaveChanges(); 
    } 
} 




[TestClass] 
public class UnitTest 
{ 
    [TestMethod] 
    public void DeleteUser() 
    { 
     mockContext = new Mock<UserService>(); 
     mockContext.SetUp(x => x.Users(It.IsAny<int>()).Returns(userid) 
    } 
} 
+0

哪裏是無效你想測試的方法? –

+0

在實際的數據庫上做單元測試不是一個好的選擇,如果你不使用IoC,那麼在這裏就不需要Moq了,如果你的類不是虛擬的,它就不會工作。除此之外,重新思考你真正想通過測試達到的目標。 – Erexo

+0

請參閱下面的相關問題。這可能是其中之一的重複。 –

回答

2

void的方法可以做兩件重要的事情:

  1. 編輯狀態
  2. 呼叫等方法

因爲你的方法做不直接編輯狀態你想測試的是如果使用Remove和SaveChanges被調用r被發現,如果不是,則不會調用任何東西。

模擬有一個特殊的驗證方法,您可以使用這兩種情況。下面是例子如何驗證的SaveChanges被稱爲(您可以通過該方式把裏面如果):

mockContext 
    .Verify(c => c.SaveChanges(), Times.Once()); 

或(如用戶不存在的情況下):

mockContext 
    .Verify(c => c.SaveChanges(), Times.Never());