Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.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# 如何在.NETCore中为通用存储库模式编写单元测试用例_C#_Nunit_Moq_Dbset - Fatal编程技术网

C# 如何在.NETCore中为通用存储库模式编写单元测试用例

C# 如何在.NETCore中为通用存储库模式编写单元测试用例,c#,nunit,moq,dbset,C#,Nunit,Moq,Dbset,您好,我正在尝试为通用存储库模式方法编写nunit测试用例。 下面是我在dbrepository中的方法 public类DbRepository:BaseRepository,idbreository T:在哪里上课 { 私有只读dbcontextu DbContext; 专用只读数据库集; 公共数据库存储库(DbContext DbContext) { _dbContext=dbContext; dbSet=dbContext?.Set(); } 公共异步任务GetAsync(表达式筛选器=n

您好,我正在尝试为通用存储库模式方法编写nunit测试用例。
下面是我在dbrepository中的方法

public类DbRepository:BaseRepository,idbreository
T:在哪里上课
{
私有只读dbcontextu DbContext;
专用只读数据库集;
公共数据库存储库(DbContext DbContext)
{
_dbContext=dbContext;
dbSet=dbContext?.Set();
}
公共异步任务GetAsync(表达式筛选器=null,Func orderBy=null,参数表达式[]包含)
{
IQueryable query=this.dbSet;
foreach(表达式include in includes)
{
query=query.Include(包含);
}
if(过滤器!=null)
{
query=query.Where(过滤器);
}
if(orderBy!=null)
{
query=orderBy(查询);
}
返回wait query.ToListAsync().configurewait(false);
}
}
然后我计划使用FakeDbSet,如下所示。我有点困惑。我在github中找到了一个例子,他们有一些方法。在fakedbset中,我们是否需要在我的数据库中编写完全相同的方法?下面是我的fakedbset课程

公共类FakeDbSet:DbSet其中T:class
{
可观测采集数据;
IQueryable\u查询;
公共伪造集()
{
_数据=新的ObservableCollection();
_query=_data.AsQueryable();
}
公共异步任务GetAsync(表达式筛选器=null,Func orderBy=null,参数表达式[]包含)
{
IQueryable查询=\u查询;
foreach(表达式include in includes)
{
query=query.Include(包含);
}
if(过滤器!=null)
{
query=query.Where(过滤器);
}
if(orderBy!=null)
{
query=orderBy(查询);
}
返回wait query.ToListAsync().configurewait(false);
}
}
在上面的代码中,我添加了与dbrepository中相同的GetAsync方法,但在上面的方法代码中没有添加

IQueryable查询=\u查询;这导致错误,无法将类型system.linq.Iqueryable隐式转换为system.linq.Iqueryable

然后我写了我的一个测试

[测试]
public void TestGetAsync()
{
//安排
var mock=new mock();
mock.Setup(x=>x.Set())
.Returns(新FakeDbSet)
{
新的OrderDetails{OrderDetailsId=6}
});
var entityRepository=newdbrepository(mock.Object);
var orders=entityRepository.GetAsync();
}

由于上述错误,我无法运行此测试。我还想知道Fakedbset方法应该和我的dbrepository方法相同吗?我在IQueryable query=\u query中遇到错误;正如我提到的。所以我在做这件事的时候遗漏了一些东西,有人能帮我纠正一下吗。任何帮助都将不胜感激。谢谢

您使用的是.NET Fw还是.NET Core?还请与我们分享哪个版本。嗨,彼得,我正在使用.net coreWhat版本。您使用的是NET Core吗?嗨,Peter,我使用的是dotnetcore 3.1,我建议您尝试使用以下软件包之一:,。这些可以使数据库模拟变得非常容易。