C# Moq,测试方法返回错误-System.ArgumentNullException:值不能为null。(参数&x27;源&x27;)
我有以下服务:C# Moq,测试方法返回错误-System.ArgumentNullException:值不能为null。(参数&x27;源&x27;),c#,.net-core,moq,C#,.net Core,Moq,我有以下服务: DocumentTypeService类 公共部分类DocumentTypeService:IDocumentTypeService { 私有只读IRepository\u documentTypeRepository; 专用只读IMediator\u中介; 公共文档类型服务(IRepository documentTypeRepository,IMediator mediator) { _documentTypeRepository=documentTypeRepository
DocumentTypeService
类
公共部分类DocumentTypeService:IDocumentTypeService
{
私有只读IRepository\u documentTypeRepository;
专用只读IMediator\u中介;
公共文档类型服务(IRepository documentTypeRepository,IMediator mediator)
{
_documentTypeRepository=documentTypeRepository;
_调解人=调解人;
}
公共虚拟异步任务GetAll()
{
var query=来自_documentTypeRepository.Table中的t
orderby t.DisplayOrder
选择t;
return wait query.ToListAsync();
}
}
该测试将重新启动GetAll()
方法
[TestClass()]
公共类DocumentTypeServiceTests
{
私有模拟(documentTypeRepositoryMock);;
私人文档类型服务_DocumentTypeService;
私人模拟(Mock);;
[测试初始化()]
公共void Init()
{
_mediatorMock=新Mock();
_documentTypeRepositoryMock=新建Mock();
_documentTypeService=新的documentTypeService(\u documentTypeRepositoryMock.Object,\u mediatorMock.Object);
}
[TestMethod()]
公共异步任务GetAllDocumentTypes()
{
wait_documentTypeService.GetAll();
_documentTypeRepositoryMock.Verify(c=>c.Table,Times.Once);
}
}
GetAllDocumentTypes()
方法返回的错误
测试方法Grand.Services.Tests.Documents.DocumentTypeServiceTests.GetAllDocumentTypes引发异常:System.ArgumentNullException:值不能为null。(参数“源”)
堆栈跟踪:
Queryable.OrderBy[TSource,TKey](IQueryable'1 source,Expression'1 keySelector)
MongoQueryable.OrderBy[TSource,TKey](IMongoQueryable'1 source,Expression'1 keySelector) 更新:
//
///MongoDB存储库
///
公共部分类存储库:IRepository,其中T:BaseEntity
{
///
///得到一张桌子
///
公共虚拟IMongoQueryable表
{
获取{return _collection.AsQueryable();}
}
}
您应该模拟以下方法调用:
_documentTypeRepository.Table
具体来说,您需要以下内容:
_documentTypeRepositoryMock = new Mock<IRepository<DocumentType>>();
var mongoQueryableMock = new Mock<IMongoQueryable<DocumentType>>();
_documentTypeRepositoryMock.Setup(x=>x.Table).Returns(mongoQueryableMock);
将首先在如下查询中进行转换:
_documentTypeRepository.Table
.OrderBy(x=>x)
.Select(x=>x)
随后,将根据后一个查询生成相应的IL代码
因此,如果
\u documentTypeRepository.Table
返回null,那么调用OrderBy
将抛出null指针异常。您想测试什么?当\u documentTypeRepository.Table
为空时引发异常?如果不是,则需要设置\u documentTypeRepository.Table
以返回非空值谢谢。属性表返回IMongoQueryable。我用code Repository.cs更新了quetion。我如何在模拟对象中返回值?@StefanHansch不客气。请检查我的更新并让我知道。Thanksget错误:`Test method Grand.Services.Tests.DocumentTypeServiceTests.GetAllDocumentTypes引发异常:System.NullReferenceException:对象引用未设置为对象的实例。堆栈跟踪:Queryable.OrderBy[TSource,TKey](IQueryable1 source,Expression1 keySelector)MongoQueryable.OrderBy[TSource,TKey](IMongoQueryable1 source,Expression1 keySelector)`@StefanHansch您修复了吗?我看到你将答案标记为解决方案,我认为你已经解决了。还没有。但这是另外一个问题。我在这里提出了一个新问题,请你也检查一下。
_documentTypeRepository.Table
.OrderBy(x=>x)
.Select(x=>x)