gpt4 book ai didi

c# - 验证是否使用 moq 调用了 linq 扩展方法

转载 作者:行者123 更新时间:2023-11-30 22:01:54 24 4
gpt4 key购买 nike

我有一个这样的方法:

    public IEnumerable<string> GetCompaniesCities()
{
return CompanyRepository.All()
.OrderBy(c => c.City)
.Select(c => c.City.ToUpper())
.Distinct().ToList();
}

我如何测试(使用最小起订量)调用了 OrderBy (c => c.City)?还有 Select(c => c.City.ToUpper()Distinct()

我得到了

Invalid verify on a non-virtual (overridable in VB) member: x => x.All().OrderBy(c => c.City)

注意:是单元测试,不是集成测试,所以不去db

最佳答案

您不会测试 OrderBy 是否被调用,只测试返回的字符串是否有序要容易得多。即,使用 NUnit:

Assert.That(sut.GetCompaniesCities(), Is.Ordered);

还有你的起订量can't test that an extension method like OrderBy is called , 这是不可能的。


为了解决您关于无法访问数据库的评论,您是对的,模拟您的依赖项消除了访问数据库的需要。但是您可以模拟它们的返回值,这样您就可以模拟它们确实访问了数据库。所以在这里,您的存储库是一个依赖项,您将模拟 All() 以返回未排序值的列表:

var companiesUnsorted = new Company[] { 
new Company { City = "Xyz" },
new Company { City = "Abc" }
};
var mockRepository = new Mock<ICompanyRepository>();
mockRepository.Setup(p => p.All()).Returns(companiesUnsorted);

var sut = new WhateverClassYourCodeSampleIsFrom(mockRepository.Object);

然后你只需执行上面的断言。

关于c# - 验证是否使用 moq 调用了 linq 扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27367037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com