用于逻辑读取的单元测试 Sql

Posted

技术标签:

【中文标题】用于逻辑读取的单元测试 Sql【英文标题】:Unit testing Sql for logical reads 【发布时间】:2009-12-10 14:50:54 【问题描述】:

我们对数据访问层进行了单元测试。这有助于发现 sql 语法错误。 现在我们有了这些测试,我想更进一步。我想运行单元测试并自动查找具有大量逻辑读取的sql。(查找需要调整的sql)

在sql中添加“set statistics IO”并不难。我正在寻找的是一个存储过程,我将它发送到数据库,它返回一个包含有关 sql 的逻辑读取信息的字符串。我在 Sybase 工作,但如果您知道存储 proc/etc 在不同的数据库中执行此操作,那仍然会有很大帮助。

谢谢!

【问题讨论】:

【参考方案1】:

这对于 TSQL 过程是不可能的,但可以通过订阅 SqlConnection 对象上的 InfoMessage 事件在 .net 中捕获输出。

  ...
  using (var connection = new SqlConnection("connectionstring")
  using (var command = new SqlCommand("SET STATISTICS IO ON"))
  
      connection.Open();
      connection.InfoMessage += OnInfoMessage;

      using (var reader = command.ExecuteReader())
      
          ....
      
  
  ...

  private static void OnInfoMessage(object sender, SqlInfoMessageEventArgs args)
  
      foreach (SqlError err in args.Errors)
      
           Console.WriteLine(err.Message);
      
  

【讨论】:

以上是关于用于逻辑读取的单元测试 Sql的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 单元测试 - 添加一个用于所有测试类的通用函数

Android Studio 单元测试:读取数据(输入)文件

用于单元测试的 UserDefaults 实例?

python 单元测试,unittest 测试框架

Spring Boot 单元测试不适用于 application.yml

Excel数据源结合单元测试DDT进行测试