我目前正在使用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);
}
答案 0 :(得分:0)
要尝试回答您的问题,我将引用各个部分:
为此,我从数据库获取数据并通过我要测试的方法,然后比较数据库表数据与方法返回数据相同。我怀疑这样做很好做单元测试吗?有人可以解释吗?
您的单元测试方法并不是真正的好习惯。让我解释。这里有两件事要考虑。让我从第一个开始。
第一通常,您希望进行单元测试,其中输入和输出是固定的,或者至少独立于外部数据源,例如数据库中的表/行/记录。因此,通常最好在单元测试中在内存中创建数据集。
第二您需要了解或 这正是您要测试的内容。就您而言,似乎正在测试实体框架,您可能希望考虑已对其进行测试。
我已经尝试过moq测试,但是我的方法存在一些问题。有时findasync对于Moq测试中的返回列表不起作用。然后我放弃了,转向nunit测试。我为实体框架编写单元测试。
因此,我认为最好专注于这些问题。并且:“为实体框架编写单元测试” 似乎过大,除非您正在开发它。
那么,有什么好测试的东西吗?
也许您会使用类似GetFirmSectionListAsync
的方法。也许正在发生一些内部逻辑,您可以对其进行测试。但要这样做,请使用覆盖所有逻辑场景的静态数据集。您不希望测试/构建失败,因为有人删除了一些记录。