Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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
Unit testing DefaultIfEmpty Linq to Sql在Moles测试中返回null_Unit Testing_Linq To Sql_Moles_Defaultifempty - Fatal编程技术网

Unit testing DefaultIfEmpty Linq to Sql在Moles测试中返回null

Unit testing DefaultIfEmpty Linq to Sql在Moles测试中返回null,unit-testing,linq-to-sql,moles,defaultifempty,Unit Testing,Linq To Sql,Moles,Defaultifempty,我在测试我的repository类时使用了moles,当我放入DefaultIfEmpty(new Drivers())时,它可以工作,但当我运行该程序时,我得到以下错误:不支持的重载用于查询运算符“DefaultIfEmpty”。 但当我将其放回DefaultIfEmpty()时,它工作正常,但我的*strong text*moles测试现在返回空值。。这是我的密码: var result = from p in this.context.AirPositions

我在测试我的repository类时使用了moles,当我放入DefaultIfEmpty(new Drivers())时,它可以工作,但当我运行该程序时,我得到以下错误:不支持的重载用于查询运算符“DefaultIfEmpty”。

但当我将其放回DefaultIfEmpty()时,它工作正常,但我的*strong text*moles测试现在返回空值。。这是我的密码:

 var result = from p in this.context.AirPositions
                         join a in this.context.Airplane p.airplane_id equals a.id
                         join s in this.context.Status on p.status_id equals s.id
                         join dp in this.context.DriversPositions on p.id equals dp.position_id into dpJoin
                         from ds in dpJoin.DefaultIfEmpty(new DriversPosition())
                         join d in this.context.Drivers on ds.driver_id equals d.id into dsJoin
                         from drs in dsJoin.DefaultIfEmpty(new Driver())
                         orderby p.timesent descending
                         select new PositionViewModel()
                         { ... };

linq提供程序似乎不支持采用默认值的DefaultOrEmpty函数的重载


如果你想用moles测试,你必须重写你的代码。我知道测试不应该改变你的代码。尝试使用SingleOrDefault重写代码。

使用Linq to Sql和Linq to Object运行的代码似乎有问题

我用以下方法解决了这个问题:

var result = from p in this.context.AirPositions
             join a in this.context.Airplane on p.asset_id equals a.id
             let driver = (from dd in this.context.DriversPositions.Where(u => u.position_id == p.id)
             join d in this.context.Drivers on dd.driver_id equals d.id
             select d).FirstOrDefault()
             orderby p.timesent descending
             select new PositionViewModel() {...}
希望这能帮助其他人:)