c# - 如何测试具有数据库查询来更新数据的方法?

标签 c# sql unit-testing integration-testing

我有一个如下的方法:

public void ImportDataCommand()
{
    // some data validation logic here

    if (some_criteria_is_true)
    {
        // Call to a method which uses sql queries to update some records
        UpdateRecords();
    }
    else
    {
        // Call to a method which uses sql queries to delete some records
        DeleteRecords();
    }
}
  • 如何对 UpdateRecords()DeleteRecords() 方法进行单元测试? (如果可能的话)
  • 我当前的模式是一种气味吗?
  • 当您有一些数据更新逻辑依赖于一些数据验证逻辑和一些条件逻辑时,是否有更好的方法来处理?

更新

我对在这里模拟数据源不感兴趣。我想确保我的 SQL 查询是否正确并且正在执行正确的更新。很抱歉造成困惑,如果您认为我想测试我的验证逻辑而不是我的数据更新逻辑 (SQL)。

我确实有模拟框架的经验,并且我确实成功地使用它们为我的正常应用程序逻辑编写了单元测试。

最佳答案

您的问题以短语“以及”开头。

不要在同一个类中进行验证和数据访问 - 将数据访问委托(delegate)给另一个类并注入(inject)它 - 这样您就可以在测试验证时模拟数据源。

class Bar {
private DataAccessService service

public void Foo()
{
    // some data validation logic here

    if (some_criteria_is_true)
    {
        // Call to a method which uses sql queries to update some records
        service.updateBarRecords();
    }
    else
    {
        // Call to a method which uses sql queries to delete some records
        service.deleteBarRecords();
    }
}

}

然后,您可以使用模拟框架来测试是否调用了正确的服务方法。

关于c# - 如何测试具有数据库查询来更新数据的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8182098/

相关文章:

sql - PostgreSQL 在 where 子句中使用求和

sql - SQL 中的自引用 CASE WHEN 子句

PHPUnit - 数据库测试,如何管理它

angular - 如何使用自己的依赖项测试内部嵌套组件的 Angular 2 组件? (TestBed.configureTestingModule)

c# - Web 浏览器中的内容在 Windows 窗体应用程序中自动缩放时出现问题

c# - IsMouseCaptured 变为 False

c# - 将 Asp.net 核心 Controller 限制为特定域名

c# - 启动画面显示方法最佳实践C#

sql - dplyr 与 dbplyr 带空格过滤

c# - 使用 ItExpr.IsNull<TValue> 而不是空参数值,因为它会阻止正确的方法查找