2017-05-03 54 views
-3
public List<CustomerViewModel> GetResellerCustomersWithProperties(string shortCode) 
     {    
      var businessManager = DependencyContainer.GetInstance<ICortexBusinessManager>(); 
      return businessManager.GetResellerCustomersWithProperties(shortCode); 
     } 

我們如何編寫使用Nunit的測試用例,它具有從接口的依賴關係。如何使用NUnit編寫測試用例,它具有對依賴關係的依賴關係?

+0

[嘲笑他們](http://stackoverflow.com/questions/5627371/how-do-you-use-moq-to-mock-a-simple-interface )< - (可點擊)。 – Szer

+0

這裏有一個設計問題....不應該依據每個方法來解決依賴關係。你應該使用基於構造函數的依賴注入。嘲笑依賴關係和單元測試會更容易。 –

回答

0

依賴注入是你的朋友在這裏。
注意您將需要一個IOC容器,例如Autofac,Unity,StructureMap等......與您的應用程序進行連接。

注入你的依賴在類的構造函數:

public class CustomerService 
{ 
    private ICortexBusinessManager _cortexBusinessManager; 

    public CustomerService (ICortexBusinessManager cortexBusinessManager) 
    { 
     _cortexBusinessManager = cortexBusinessManager; 
    } 

    public List<CustomerViewModel> GetResellerCustomersWithProperties(string shortCode) 
    {    
     return _cortexBusinessManager.GetResellerCustomersWithProperties(shortCode); 
    } 
} 

然後,您可以使用您的單元測試中的模擬框架來嘲笑你的接口調用。下面

實施例使用Moq

public class CustomerServiceTest 
{ 
    [Test] 
    public void GetResellerCustomersWithProperties_ReturnsFromCortextBusinessManager() 
    { 
     //arrange 
     var mockCortexBusinessManager = new Mock<ICortexBusinessManager>(); 

     //if GetResellerCustomersWithProperties is called with s123, return a new list of CustomerViewModel 
     //with one item in, with id of 1 
     mockCortexBusinessManager.Setup(m=> m.GetResellerCustomersWithProperties("s123")) 
      .Returns(new List<CustomerViewModel>(){new CustomerViewModel{Id = 1}}); 


     var customerService = new CustomerService(mockCortexBusinessManager.Object); 

     //act 
     var result = customerService.GetResellerCustomersWithProperties("s123"); 

     //assert 
     Assert.AreEqual(1, result.Count()) 
     Assert.AreEqual(1, result.FirstOrDefault().Id) 
    } 
}