【问题标题】:Progress feedback while executing tSQLt.RunAll执行 tSQLt.RunAll 时的进度反馈
【发布时间】:2014-03-03 10:21:22
【问题描述】:

有没有办法在 tSQLt.RunAll 运行时获得任何反馈。在具有高 % DB 单元测试覆盖率的非常大的项目中,此命令需要很长时间。我希望能够看到(并显示)此命令的进度。是否可以?

【问题讨论】:

    标签: database unit-testing ssms tsqlt


    【解决方案1】:

    如果我想查看 tSQLt 在长长的测试列表中的位置,我会使用

    SELECT Class,TestCase,Result FROM tSQLt.TestResult (NOLOCK)
    

    显示当前执行中迄今为止执行的测试结果。 您可以将其加入 tSQLt.Tests:

    SELECT Tests.TestClassName,Tests.Name,TestResult.Result 
    FROM tSQLt.Tests (NOLOCK)
    LEFT JOIN tSQLt.TestResult (NOLOCK)
     ON tSQLt.Tests.TestClassName = tSQLt.TestResult.Class
     AND tSQLt.Tests.Name = tSQLt.TestResult.TestCase
    

    在测试通过、失败或错误之前,Result 列将为 NULL。我使用的是 NOLOCK,所以是脏读,但这足以让我建立进度,并防止对正在进行的测试造成任何干扰。

    希望对你有帮助,

    戴夫。

    【讨论】:

      【解决方案2】:

      我所做的是创建一个 t4 模板,然后我通过 nunit 将测试全部作为单独的测试运行。这意味着它也很容易与您的 CI 服务器集成。 你可以看看我是怎么做到的here

      或者,这样的事情可能会起作用。

      set nocount on    
      create table #tests (id int identity(1,1), testclassname varchar(250), testname varchar(500))
      go
      
      insert #tests (testclassname, testname)
      select testclassname, name
      from tSQLt.Tests
      
      declare @sqlCmd varchar(1000)
      declare @id int
      while exists(select * from #tests)
      begin
          select @id = min(id) from #tests
          select  @sqlCmd = 'exec tsqlt.run ''' + testclassname + '.' + testname +''' ' from #tests where id=@id
          exec(@sqlCmd)
      
          delete from #tests where id = @id
      end
      
      drop table #tests
      go
      

      这将在消息窗口中为您提供每个单独测试的结果,但跟踪正在执行的测试并不容易,因为它们从底部滚动。

      RedGate 还有一个test runner,您可以安装它,让您可以在 Management Studio 中运行测试,并通过 GUI 为您提供反馈。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多