当前位置:  开发笔记 > 编程语言 > 正文

WHERE语句在使用It.IsAny的单元测试中不起作用

如何解决《WHERE语句在使用It.IsAny的单元测试中不起作用》经验,为你挑选了1个好方法。

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

public IQueryable FindBy(Expression> predicate)
{
   return Entities.Where(predicate);
}

实体是 IDbSet Entities = _context.Set();

我想测试方法的控制器,但我总是NULLhouses.
你能给我一些建议吗?

public override HttpResponseMessage Get()
{
    var houses = Repository.FindBy(y => y.Year == DateTime.Now.Year);

    if (houses != null && houses.Any())
    {
        return Request.CreateResponse(HttpStatusCode.OK, houses);
    }

    const string message = "House: No content";
    return ErrorMsg(HttpStatusCode.NotFound, message);
}

这是我的测试方法

[TestMethod]
public void GetAll()
{   //Arrange
    var houses = new List
     {
         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>();
    mock.Setup(m => m.FindBy(f => f.Year == It.IsAny()))
        .Returns(houses.AsQueryable());
    //...

    var controller = new HouseController(mock.Object);
    //Action
    var response = controller.Get();
    var result = response.ContentToQueryable();
    //Assert
    Assert.AreEqual(5, result.Count());
}

stuartd.. 6

这不是使用It.IsAny的正确方法,它用于替换整个参数,而不是一个参数的一部分 - 在这种情况下,您可以使用它(某些东西)来表示未指定的谓词:

 mock.Setup(m => m.FindBy(It.IsAny>>())

您已经知道控制器方法将使用当前年份,请将其用于设置:

mock.Setup(m => m.FindBy(f => f.Year == DateTime.Now.Year))

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



1> stuartd..:

这不是使用It.IsAny的正确方法,它用于替换整个参数,而不是一个参数的一部分 - 在这种情况下,您可以使用它(某些东西)来表示未指定的谓词:

 mock.Setup(m => m.FindBy(It.IsAny>>())

您已经知道控制器方法将使用当前年份,请将其用于设置:

mock.Setup(m => m.FindBy(f => f.Year == DateTime.Now.Year))

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


@Rob我的一位同事试图通过使用"TimeProvider"类来缓解单元测试中的日期问题.不幸的是,他把它变成了一个静态类,所以一旦测试开始同时运行,它们就会踩到彼此的预期时间值.娱乐时间 :)
推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有