2017-08-15 47 views
0

我试图单元测试搜索功能,我已经将匹配部分输入的字符串结果,如果存在。 我失败的测试:单元测试部分文本搜索服务

[Theory(DisplayName = "Retrieve a Customer by partial name if the customer exists.")] 
    [InlineData("fifth")] 
    public async Task ProviderClass_GetCustomersByPartialName(string name) 
    { 
     var mockISecurityTokenProvider = new Mock<ISecurityTokenProvider>(); 
     mockISecurityTokenProvider.Setup(i => i.GetSecurityToken()).Returns(() => new SecurityToken 
     { 
      CurrentAccessLevel = AccessLevel.Full 
     }); 

     var customerRepository = new CustomerRepository(_context, mockISecurityTokenProvider.Object); 
     var irrelevantRepo = new irrelevantRepo(_context, mockISecurityTokenProvider.Object); 

     var service = new CustomerProvider(customerRepository, irrelevantRepo, 
      new CustomerFactory(), 
      new Mock<IGenericModelFactory<mockedModel, mockedTable>>().Object, 
      new Mock<IGenericModelFactory<mockedModel, mockedTable>>().Object, 
      new Mock<IGenericModelFactory<mockedModel, mockedTable>>().Object, 
      new Mock<IGenericModelFactory<mockedModel, mockedTable>>().Object, 
      new Mock<IGenericModelFactory<mockedModel, mockedTable>>().Object); 

     var item = await service.GetCustomersByPartialNameAsync(name); 

     Assert.True(item?.Any(i => i.Name.ToLower().Contains(name.ToLower()))); 

和服务代码我测试:

public async Task<IEnumerable<Customer>> GetCustomersByPartialNameAsync(string name, 
     CancellationToken cancellationToken = new CancellationToken()) 
    { 
     var items = 
      await _customerReader.GetCustomers() 
       //Includes of tables where relevant results might be 
       .Where(i => i.CustomerStatusId == 1 && i.Name.ToLower().Contains(name.ToLower())) 
       .ToListAsync(cancellationToken); 

     return items.Select(Create); 
    } 

我在做什么错?

回答

0
  1. 唯一的模拟设置你应该使用(我看不到),它应该是customerReader.GetCustomers()
  2. 请使用default(CancellationToken)CancellationToken.None
  3. 请嘲笑只在必要时,可以考虑使用假

希望这个帮助