Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Moq,测试方法返回错误-System.ArgumentNullException:值不能为null。(参数&x27;源&x27;)_C#_.net Core_Moq - Fatal编程技术网

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)