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