asp.net-mvc - 需要帮助了解 Moq 如何解决实际查询

标签 asp.net-mvc asp.net-mvc-4 moq

下面是我的测试用例,运行良好。

    [TestMethod]
    public void GetCompanies_WhenInvokedWithSearchText_ShouldReturnFilteredCompanies()
    {
        // Arrange
        var context = new Mock<IDataContext>(MockBehavior.Strict);
        var companies = new List<Company>
        {
            new Company()
            {
                Address = "London",
                Name = "ABC Inc."
            },
            new Company()
            {
                Address = "Newyork",
                Name = "Toyota"
            },
            new Company()
            {
                Address = "Ealing broadway",
                Name = "Amazon"
            }
        };
        context.Setup(s => s.Query<Company>()).Returns(companies.AsQueryable());
        var repository = new CompanyRepository(context.Object);

        // Act
        var expectedCompanies = repository.GetCompanies("ABC");

        // Assert
        Assert.AreEqual(1, expectedCompanies.Count);
        Assert.AreEqual("London", expectedCompanies.ToList()[0].Address);
    }

我的存储库代码是这样的:

    public ICollection<Company> GetCompanies(string searchText)
    {
        Guard.ArgumentNotNull(searchText, "searchText");

        return _dbContext.Query<Company>().Where(c => c.Name.Contains(searchText) || c.Address.Contains(searchText)).ToList();
    }

我只是不明白 Moq 是如何应用实际方法中存在的过滤器(在哪里)的,但我没有在测试中设置?

我的猜测是,当测试执行模拟对象的 Query 方法时,会调用已经应用了过滤器的方法。是否使用反射动态发现 where 子句存在?

只是想清楚地理解它。

最佳答案

没有什么神奇的:)看看这一行

context.Setup(s => s.Query<Company>()).Returns(companies.AsQueryable());

何时方法 Query<Company>()执行后,返回companies.AsQueryable()Where是在此基础上执行的,因此 Moq 不会猜测任何内容。

关于asp.net-mvc - 需要帮助了解 Moq 如何解决实际查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17969244/

相关文章:

c# - 使用 MOQ 模拟异步 Get 方法

asp.net-mvc - 在 LINQ 查询和 ASP.NET MVC 方面需要帮助?

asp.net-mvc - 如何使用 StructureMap 在另一个程序集中使用绑定(bind)?

javascript - 如何使用javascript获取下拉列表的选定值

asp.net-mvc - MVC 添加对 View 的引用

c# - 不允许过滤

asp.net-mvc - 400 BadRequest错误和自定义错误页面

asp.net - 从 MVC 重定向到 Web 表单(.aspx)

c# - 模拟存储库返回 null

entity-framework - 如何构建工作单元/服务层/存储库,以便它们与 DI (Unity) 和 Moq 一起进行单元测试