Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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# WHERE语句在使用它的单元测试中不起作用。IsAny_C#_Asp.net_Linq_Unit Testing_Mocking - Fatal编程技术网

C# WHERE语句在使用它的单元测试中不起作用。IsAny

C# WHERE语句在使用它的单元测试中不起作用。IsAny,c#,asp.net,linq,unit-testing,mocking,C#,Asp.net,Linq,Unit Testing,Mocking,我的存储库的单元测试有一些问题,尤其是方法FindBy() 这是我的测试方法 [TestMethod] public void GetAll() { //Arrange var houses = new List<House> { new House {ID = 1, BuildNr = "01", HouseNr = "001" }, new House {ID = 2, BuildNr = "02", HouseNr =

我的存储库的单元测试有一些问题,尤其是方法
FindBy()

这是我的测试方法

[TestMethod]
public void GetAll()
{   //Arrange
    var houses = new List<House>
     {
         new House {ID = 1, BuildNr = "01", HouseNr = "001" },
         new House {ID = 2, BuildNr = "02", HouseNr = "002" },
         new House {ID = 3, BuildNr = "03", HouseNr = "003" },
         new House {ID = 4, BuildNr = "04", HouseNr = "004" },
         new House {ID = 5, BuildNr = "05", HouseNr = "005" }
     };

    var mock = new Mock<IRepository<T>>();
    mock.Setup(m => m.FindBy(f => f.Year == It.IsAny<int>()))
        .Returns(houses.AsQueryable());
    //...

    var controller = new HouseController(mock.Object);
    //Action
    var response = controller.Get();
    var result = response.ContentToQueryable<T>();
    //Assert
    Assert.AreEqual(5, result.Count());
}
[TestMethod]
public void GetAll()
{//安排
var houses=新列表
{
新房{ID=1,BuildNr=“01”,HouseNr=“001”},
新房{ID=2,BuildNr=“02”,HouseNr=“002”},
新房{ID=3,BuildNr=“03”,HouseNr=“003”},
新房{ID=4,BuildNr=“04”,HouseNr=“004”},
新房子{ID=5,BuildNr=“05”,HouseNr=“005”}
};
var mock=new mock();
mock.Setup(m=>m.FindBy(f=>f.Year==It.IsAny())
.Returns(houses.AsQueryable());
//...
var控制器=新的房屋控制器(mock.Object);
//行动
var response=controller.Get();
var result=response.ContentToQueryable();
//断言
arest.AreEqual(5,result.Count());
}

这不是使用它的正确方法。IsAny,用于替换整个参数,而不是其中一个参数的一部分-在这种情况下,您可以将其(某些内容)像这样用于未指定的谓词:

 mock.Setup(m => m.FindBy(It.IsAny<Expression<Func<int, bool>>>())

然后,如果控制器方法意外更改为使用错误的值,测试将失败。

我不确定确切的语法,但您可以从
访问传入调用的参数。返回
。所以你可以写(伪代码)
.Setup(It.IsAny()).Returns((谓词)=>house.Where(谓词).AsQueryable())请注意,第二个示例可能每年中断一次:)@Rob我的一位同事试图通过使用“TimeProvider”类来缓解单元测试中的日期问题。不幸的是,他把它变成了一个静态类,所以一旦测试开始并发运行,它们就会践踏彼此的预期时间值。欢乐时光:)
[TestMethod]
public void GetAll()
{   //Arrange
    var houses = new List<House>
     {
         new House {ID = 1, BuildNr = "01", HouseNr = "001" },
         new House {ID = 2, BuildNr = "02", HouseNr = "002" },
         new House {ID = 3, BuildNr = "03", HouseNr = "003" },
         new House {ID = 4, BuildNr = "04", HouseNr = "004" },
         new House {ID = 5, BuildNr = "05", HouseNr = "005" }
     };

    var mock = new Mock<IRepository<T>>();
    mock.Setup(m => m.FindBy(f => f.Year == It.IsAny<int>()))
        .Returns(houses.AsQueryable());
    //...

    var controller = new HouseController(mock.Object);
    //Action
    var response = controller.Get();
    var result = response.ContentToQueryable<T>();
    //Assert
    Assert.AreEqual(5, result.Count());
}
 mock.Setup(m => m.FindBy(It.IsAny<Expression<Func<int, bool>>>())
mock.Setup(m => m.FindBy(f => f.Year == DateTime.Now.Year))