执行tSQLt.RunAll时的进度反馈

时间:2014-03-03 10:21:22

标签: database unit-testing ssms tsqlt

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

2 个答案:

答案 0 :(得分:2)

如果我想查看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,所以这是一个脏读,但这足以让我的目的建立进度,并防止正在进行的测试中断。

希望有所帮助,

戴夫。

答案 1 :(得分:1)

我所做的是创建一个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为您提供反馈。