使用数据库数据的 C# 单元测试

C# Unit Test using database data

我目前正在使用 nunit 编写单元测试。为此,我从数据库中获取数据并通过我想要测试的方法,然后我比较数据库 table 数据与方法 return 数据相同。我怀疑这是否适合做单元测试?有人可以解释一下吗?我已经尝试过最小起订量测试,但我的方法存在一些问题。有时 finasync 不适用于 Moq 测试中的 return 列表。然后我放弃它并转向 nunit 测试。我为 entity framework.

编写单元测试
[Test]
    public async Task GetFirmSectionListAsync_Count_AreEqual()
    {
        var fICount = _clientDbContext.FITypes.ToList().Count;
        var fIResult = await _firmService.GetFISListAsync(new CancellationToken(), Startup.ConnString);

        Assert.AreEqual(fICount, fIResult.Entities.Count);
    }

为了回答您的问题,我将引用各个部分:

To do this i get data from the database and pass through the method that i want to test, then i compare database table data are same as the method return data. I have a doubt is this good to do unit test? Can someone explain this?

您的单元测试方式并不是很好的做法。让我解释。这里有两件事需要考虑。让我从第一个开始。

第一的

通常您希望进行单元测试,其中输入和输出是固定的,或者至少独立于外部数据源,例如数据库中的 tables/rows/records。因此,一般来说,在单元测试中在内存中创建数据集会更好也更容易。

第二

您需要注意或什么这正是您想要测试的。在你的情况下,你似乎正在测试 Entity Framework,你可能想考虑已经测试过。

I have tried moq test but it has some problem with my methods. sometimes findasync not work for return list in Moq test. then i giveup it and turned to nunit test. I write unit test for entity framework.

所以,我觉得还是把注意力集中在这些问题上比较好。并且:“为 entity framework 编写单元测试” 除非你正在开发它,否则似乎有点矫枉过正。


那么,测试什么东西比较好?

好吧,你的方法可能像 GetFirmSectionListAsync。也许有一些内部逻辑正在进行,您可以对其进行测试。但要这样做,请使用涵盖所有逻辑场景的静态数据集。您不希望 test/build 因为有人删除了一些记录而失败。