首页 > 解决方案 > 数据存储库中 Where 方法的模拟在存储库中的实际实现中返回 null

问题描述

我已经为 EF 核心中的一个类的编辑模型编写了一个测试。

public async Task<Expense> EditExpense(Expense model)
{
        var expense = _dataRepository.Where<Expense>(x => x.Id == model.Id).ToList();

        if(expense != null)
        {
            expense.ForEach(x =>
            {
                x.Name = model.Name;
                x.AddedOn = model.AddedOn;
                x.Amount = model.Amount;
                x.Type = model.Type;
                x.SplitOption = model.SplitOption;
                x.Notes = model.Notes;
                x.IsGroupExpense = model.IsGroupExpense;
            });

            return expense.FirstOrDefault();
        }
        else
        {
            return null;
        }
}

我想使用 xUnit 和 Moq 测试这个方法,我还为它编写了一个方法,如下所示。

[Fact]
public async void UnitTest_IsExpenseEdited_ReturnsTrue()
{
        var expenseCurrent = new Expense()
        {
            Id = 5,
            Name = "Test Expense",
            Amount = 1500,
            AddedBy = "44db32c3-ad6a-4d68-a683-862be363f59c",
            AddedOn = DateTime.Now,
            Notes = "",
            IsDeleted = false,
            IsGroupExpense = false,
            SplitOption = 1,
            Type = 0
        };

        var expenseList = (new List<Expense>{ expenseCurrent });

        var expenseAfterEdit = new Expense()
        {
            Id = 5,
            Name = "Test Expense Edited",
            Amount = 2000,
            AddedBy = "44db32c3-ad6a-4d68-a683-862be363f59c",
            AddedOn = DateTime.Now,
            Notes = "Edited !!!",
            IsDeleted = false,
            IsGroupExpense = true,
            SplitOption = 2,
            Type = 0
        };

        _dataRepositoryMock.Setup(x => x.Where<Expense>(a => a.Id == expenseCurrent.Id)).Returns(expenseList as IQueryable<Expense>);

        var expenseEdited = await _exepenseRepository.EditExpense(expenseAfterEdit);
        Assert.Equal(expenseEdited, expenseAfterEdit);
}

但是在这里,该Where方法返回 null

public async Task<Expense> EditExpense(Expense model)
{
        var expense = _dataRepository.Where<Expense>(x => x.Id == model.Id).ToList(); in repository 
}

我在上面的代码中得到了 var fee null。

请建议我应该在代码中包含什么以获得上述 var 费用中的值?

为了测试这个方法,我想创建一个要更新的假数据。请建议如何正确编写这个东西?

标签: asp.nettestingnullmoqxunit

解决方案


推荐阅读