在单元测试中,我需要调用以下类中的GetAvailableProducts方法:
public class ProductProvider : IProductProvider
{
private readonly IProductService _service;
private readonly IElasticSearchService _elasticSearchService;
public ProductProvider(IProductService service, IElasticSearchService elasticSearchService)
{
_service = service;
_elasticSearchService = elasticSearchService;
}
public PageResult<Product> GetAvailableProducts(ProductSearchRequest request)
{
return _elasticSearchService.GetProducts(request);
}
}问题是这个类接受接口作为参数,我不知道如何正确地实例化它。我尝试过以下几种方法:
public static class Searcher
{
private static readonly IProductService _service;
private static readonly IElasticSearchService _elasticSearchService;
private static readonly IProductProvider _pp = new ProductProvider(_service, _elasticSearchService);
public static PageResult<Product> GetData()
{
...
return _pp.GetAvailableProducts(request);
}
}当调试器到达_elasticSearchService.GetProducts(request)时,它当然会为_elasticSearchService抛出一个“空对象引用”错误。如何正确地实例化这个类?
发布于 2019-11-11 20:42:58
您应该在自定义类中实现接口(IProductService、IElasticSearchService),然后将这些类引用到ProductProvider的ctor。在引用它们之前,在Searcher类中创建IElasticSearchService和IProductService的实例
发布于 2019-11-11 20:46:55
不能直接实例化接口,但可以将对象声明为接口,然后将其实例化为实现该接口的任何类。
而且,您的新ProductProvider正在使用搜索器类上的空_elasticSearchService进行初始化。
如下所示:
private static readonly IElasticSearchService _elasticSearchService = new ClassImplementingElasticSearchServiceInterface(); https://stackoverflow.com/questions/58801406
复制相似问题