Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
Asp.net mvc 模拟安装程序未按预期工作_Asp.net Mvc_Nunit - Fatal编程技术网

Asp.net mvc 模拟安装程序未按预期工作

Asp.net mvc 模拟安装程序未按预期工作,asp.net-mvc,nunit,Asp.net Mvc,Nunit,我正在使用NUnit测试我的应用程序,方法如下 public int POCRemainingUnits() { var units = _transportService.GetUnits(x => x.Shipment.Id == shipmentId && x.POCAllowed == true && x.IsPOC == false, 0); int POCUnitCount = units.C

我正在使用NUnit测试我的应用程序,方法如下

      public int POCRemainingUnits()
    {

        var units = _transportService.GetUnits(x => x.Shipment.Id == shipmentId && x.POCAllowed == true && x.IsPOC == false, 0);
        int POCUnitCount = units.Count();

        //
        //
    }
我的测试方法是

[Test]
        public void Invoke_POCUnitCommand_As_Many_Times_As_Number_Of_Remaining_Units_With_Valid_Input()
        {
            //arrange
            var unit1 = new Unit { IsPOC = false, POCAllowed = true };
            var unit2 = new Unit { IsPOC = false, POCAllowed = true };
            IQueryable<Unit> units = (new Unit[] { unit1, unit2 }).AsQueryable();



            _transportServiceMock.Setup(y => y.GetUnits(x => x.Shipment.Id == 1 && x.POCAllowed == true && x.IsPOC == false, 0)).Returns(units);


     //
     //
    }
[测试]
public void调用\u POCUnitCommand \u作为\u多次\u作为\u剩余\u单元的数量\u使用\u有效\u输入()
{
//安排
var unit1=新单元{IsPOC=false,poclowed=true};
var unit2=新单元{IsPOC=false,poclowed=true};
IQueryable units=(新单元[]{unit1,unit2}).AsQueryable();
_transportServiceMock.Setup(y=>y.GetUnits(x=>x.shipping.Id==1&&x.poclowed==true&&x.IsPOC==false,0))。返回(单位);
//
//
}
但是它失败了,因为它没有设置GetUnits方法。如果我在POCRemainingUnits中检查计数,它仍然返回零。有人能告诉我我做错了什么吗


提前感谢

根据我的经验,用lambdas作为参数进行模拟是行不通的。我们认为相等的表达式实际上并不相等

例如:

[whatever].Where(x=>x.ShipmentId == 3);
不被视为等同于

id = 3;
[whatever].Where(x=>x.ShipmentId == id);
我的建议是要么伪造存储库进行测试,要么隔离查询并使用集成测试进行测试

你可以做些什么来获得回报

Where(Arg.Any<Expression<Func<Unit, bool>>>()).Returns(units);
transportServiceMock
    .Setup(ts => ts.GetUnits(It.IsAny<Func<Unit, bool>>(), It.IsAny<int>()))
    .Returns(units);
Where(Arg.Any())。返回(单位);

对lambda表达式的测试必须以另一种方式进行。或者将其分离到一个单独的方法中,并集成测试该方法,或者创建一个您插入的假存储库,并将实体插入该存储库中以从中获取。

根据我的经验,以lambdas作为参数进行模拟是行不通的。我们认为相等的表达式实际上并不相等

例如:

[whatever].Where(x=>x.ShipmentId == 3);
不被视为等同于

id = 3;
[whatever].Where(x=>x.ShipmentId == id);
我的建议是要么伪造存储库进行测试,要么隔离查询并使用集成测试进行测试

你可以做些什么来获得回报

Where(Arg.Any<Expression<Func<Unit, bool>>>()).Returns(units);
transportServiceMock
    .Setup(ts => ts.GetUnits(It.IsAny<Func<Unit, bool>>(), It.IsAny<int>()))
    .Returns(units);
Where(Arg.Any())。返回(单位);

对lambda表达式的测试必须以另一种方式进行。或者将其分离到一个单独的方法中并集成测试该方法,或者创建一个您插入的假存储库,并将实体插入该存储库中以从中获取。

要设置mock,您需要编写以下代码

Where(Arg.Any<Expression<Func<Unit, bool>>>()).Returns(units);
transportServiceMock
    .Setup(ts => ts.GetUnits(It.IsAny<Func<Unit, bool>>(), It.IsAny<int>()))
    .Returns(units);
transportServiceMock
.Setup(ts=>ts.GetUnits(It.IsAny(),It.IsAny())
.申报表(单位);

要设置mock,您需要编写如下代码

Where(Arg.Any<Expression<Func<Unit, bool>>>()).Returns(units);
transportServiceMock
    .Setup(ts => ts.GetUnits(It.IsAny<Func<Unit, bool>>(), It.IsAny<int>()))
    .Returns(units);
transportServiceMock
.Setup(ts=>ts.GetUnits(It.IsAny(),It.IsAny())
.申报表(单位);

Hi,即使我尝试了[whatever].Where(x=>x.ShipmentId==It.IsAny())之类的东西,也没有设置。。!!不,不会的。工作原理类似于Where(Arg.Any)。返回(units)Hi,即使我尝试使用[whatever].Where(x=>x.ShipmentId==It.IsAny())之类的东西,但它也没有设置。。!!不,不会的。起作用的是Where(Arg.Any).Returns(units)