【发布时间】:2014-03-03 10:21:22
【问题描述】:
有没有办法在 tSQLt.RunAll 运行时获得任何反馈。在具有高 % DB 单元测试覆盖率的非常大的项目中,此命令需要很长时间。我希望能够看到(并显示)此命令的进度。是否可以?
【问题讨论】:
标签: database unit-testing ssms tsqlt
有没有办法在 tSQLt.RunAll 运行时获得任何反馈。在具有高 % DB 单元测试覆盖率的非常大的项目中,此命令需要很长时间。我希望能够看到(并显示)此命令的进度。是否可以?
【问题讨论】:
标签: database unit-testing ssms tsqlt
如果我想查看 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,所以是脏读,但这足以让我建立进度,并防止对正在进行的测试造成任何干扰。
希望对你有帮助,
戴夫。
【讨论】:
我所做的是创建一个 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 为您提供反馈。
【讨论】: