c# - 如何对此进行单元测试?具有大量数据库调用的大 foreach

标签 c# .net unit-testing nunit moq

我必须编写一个程序,基本上从文件中读取x行,然后尝试在数据库中找到它,然后获取文件中的一些信息并更新数据库中行的信息。

如果所有其他方法都失败,请将其作为新行插入数据库中。

所以基本上进行了大量的插入和更新。

我尝试进行单元测试,因为我正在更新很多字段,我想确保每条信息都位于正确的位置(即没有使用名字或类似的内容设置电子邮件地址)。

但是我不知道该怎么做,因为我认为这是程序方法

// get records from file

foreach record in file
{
   db record = find if it is in db

   if(record != null)
   {
        if(do another logic check)
         {
             // update record
         }
         else if(do another logic check)
         { 
            // update record
         }
        else
        {
           // do some more logic 

            if(do another check)
             {
               // update record
             }
        }
   }
   else
   {
      // do some more logic checks and do inserts.
   }
}

我在一个 void 方法中看到了这个,可能还有一些私有(private)方法(例如更新记录部分)。现在我应该如何对其进行单元测试?我想对第一个 if 进行单元测试(进行另一个逻辑检查),如果说我发送的某些记录满足这些条件。

但是,由于这些是私有(private)方法,我无法对它们进行单元测试,现在我看不到该方法返回任何内容,因为它将遍历数百条记录,并且我可能会将大部分内容打印到错误日志文件什么的。

我向您展示的代码位于服务层中。我会用最小起订量模拟数据库方法调用。

该应用程序是一个控制台应用程序。

有什么建议我可以更好地分解它以便我可以检查逻辑吗?

最佳答案

您可以模拟数据库调用,也可以模拟记录类型并传递模拟的内部方法

关于c# - 如何对此进行单元测试?具有大量数据库调用的大 foreach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12731386/

相关文章:

c# - asp.net 多个文件上传控件的多个上传

unit-testing - 我们真的需要隔离框架来创建 stub 吗?

c# - 使用 HTML Agility Pack 提取动态内容

c# - out 和 ref 可以用作临时变量吗?

c# - DataGridView设置列背景色的方法

unit-testing - "Serialize" Bamboo 构建?

python - 如何测试使用 Context 的 Azure Function?

c# - 配置了一个应用程序时,没有为应用程序注册回复地址

c# - IIS下如何填充系统证书?

c# - 无法将类型 'bool?' 隐式转换为 'bool' 。存在显式转换(您是否缺少转换?)