使用数据库数据进行C#单元测试

时间:2018-08-10 09:25:17

标签: c# entity-framework unit-testing nunit

我目前正在使用nunit编写单元测试。为此,我从数据库获取数据并通过我要测试的方法,然后比较数据库表数据与方法返回数据相同。我怀疑这样做很好做单元测试吗?有人可以解释吗?我已经尝试过moq测试,但是我的方法存在一些问题。有时findasync对于Moq测试中的返回列表不起作用。然后我放弃了,转向nunit测试。我为实体框架编写单元测试。

[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);
    }

1 个答案:

答案 0 :(得分:0)

要尝试回答您的问题,我将引用各个部分:

  

为此,我从数据库获取数据并通过我要测试的方法,然后比较数据库表数据与方法返回数据相同。我怀疑这样做很好做单元测试吗?有人可以解释吗?

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

第一

通常,您希望进行单元测试,其中输入和输出是固定的,或者至少独立于外部数据源,例如数据库中的表/行/记录。因此,通常最好在单元测试中在内存中创建数据集。

第二

您需要了解或 这正是您要测试的内容。就您而言,似乎正在测试实体框架,您可能希望考虑已对其进行测试。

  

我已经尝试过moq测试,但是我的方法存在一些问题。有时findasync对于Moq测试中的返回列表不起作用。然后我放弃了,转向nunit测试。我为实体框架编写单元测试。

因此,我认为最好专注于这些问题。并且:“为实体框架编写单元测试” 似乎过大,除非您正在开发它。


那么,有什么好测试的东西吗?

也许您会使用类似GetFirmSectionListAsync的方法。也许正在发生一些内部逻辑,您可以对其进行测试。但要这样做,请使用覆盖所有逻辑场景的静态数据集。您不希望测试/构建失败,因为有人删除了一些记录。