2017-05-03 34 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) 
    } 
}