gpt4 book ai didi

c# - 尝试模拟 IQueryable Entity Framework 查询

转载 作者:太空宇宙 更新时间:2023-11-03 14:48:54 24 4
gpt4 key购买 nike

我正在尝试测试查询是否不区分大小写。此生产代码有效:

public ILookup<string, EEntry> GetEEntries(int batchId, List<string> employeeIds)
{
using (WithNoLock())
{
var result = from e in _entities.EEntries
where e.CPayBatchProcessId == batchId
&& (!e.Blocked.HasValue || e.Blocked.Value != true)
&& employeeIds.Contains(e.Id)
select e;

return result.ToLookup(e => e.Id, StringComparer.OrdinalIgnoreCase);
}
}

我无法让单元测试工作。我的第一次尝试失败了,因为我认为该列表是 IEnumerable 而不是 IQueryable。但是,我对 IQueryable 的尝试没有通过。查询区分大小写,我不希望这样。这是我为使它成为 IQueryable 所做的:

[TestCase("abc", "ABC")]
public void EEntriesAreCaseInsensitive(string employeeId1Input, string employeeId1Output)
{
var payEntries = new List<EEntry>
{
new EEntry() {CPayBatchProcessId = 8, Id = employeeId1Input},
new EEntry() {CPayBatchProcessId = 8, Id = "123"}
}.AsQueryable();

var payEntriesDbSet = new Mock<DbSet<EEntry>>();
payEntriesDbSet.As<IQueryable<EEntry>>().Setup(x => x.Provider).Returns(payEntries.Provider);
payEntriesDbSet.As<IQueryable<EEntry>>().Setup(x => x.Expression).Returns(payEntries.Expression);
payEntriesDbSet.As<IQueryable<EEntry>>().Setup(x => x.ElementType).Returns(payEntries.ElementType);
payEntriesDbSet.As<IQueryable<EEntry>>().Setup(x => x.GetEnumerator()).Returns(payEntries.GetEnumerator);

var context = new Mock<ISomeContext>();
context.Setup(x => x.EEntries).Returns(payEntriesDbSet.Object);

var employeeIds = new List<string>() { "aBc", "dEf", "gHi" };

var repo = new EEntriesRepository(context.Object);
var payEntryRecords = repo.GetEEntries(8, employeeIds);

Assert.IsTrue(payEntryRecords.Contains(employeeId1Output));
}

我错过了什么?

注意:EEntry.Id 的 getter 返回 .ToUpper()。生产代码正确地忽略了这一点。测试代码没有。

最佳答案

看起来您并没有在任何地方使用 employeeId1Output,但您断言它应该在 payEntryRecords 中。根据您的代码,您似乎应该断言 employeeId1Input 是否在 payEntryRecords 中。您明确地将 employeeId1Input 添加到您的 payEntries 对象。

关于c# - 尝试模拟 IQueryable Entity Framework 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52766411/

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