我有一个包含 tSQLt 单元测试的 SSDT 项目。
在家工作时,我总是发现发布此内容并运行所有测试(来自部署后脚本)是有问题的(针对 localdb 和 SQL Server 开发人员版)。
发布无限期挂起,我最终不得不杀死 Visual Studio。
等待类型是PREEMPTIVE_OS_AUTHORIZATIONOPS
,等待这个(来自sys.dm_exec_sql_text
)的语句的一个例子是
(@r BIT OUTPUT)
SELECT @r = CASE
WHEN I.Version = I.ClrVersion THEN 1
ELSE 0
END
FROM tSQLt.Info() AS I;
Run Code Online (Sandbox Code Playgroud)
我也通过调用重现这个
SELECT tSQLt.Private::Info()
Run Code Online (Sandbox Code Playgroud)
这是一个简单的方法
public static SqlString Info()
{
return (SqlString) Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
Run Code Online (Sandbox Code Playgroud)
我假设它正在尝试联系域控制器以建立我有一些权限或其他权限。我在其他 CLR 程序集上没有得到这个,因此怀疑这可能与 TSQLT 不是SAFE_ACCESS
程序集有关(权限集是EXTERNAL_ACCESS
)。
任何人都知道这里发生了什么以及我如何解决此问题并在与公司网络断开连接的情况下工作而不会遇到此问题?
我最近遇到一个问题,tSQLt
测试需要很长时间才能运行。
所测试的过程正在执行 38 个表 (!) 连接(具有 37 个伪造的表和一个表值参数)。
只有两个伪造的表和 TVP 插入了任何行
编译时间非常慢。
显示跟踪标志 8675
End of simplification, time: 0.002 net: 0.002 total: 0 net: 0.002
end exploration, tasks: 549 no total cost time: 0.013 net: 0.013 total: 0 net: 0.015
end search(0), cost: 13372.9 tasks: 3517 time: 0.012 net: 0.012 total: 0 net: 0.028
end exploration, tasks: 3983 Cost = 13372.9 time: 0 net: 0 total: 0 net: 0.028
end search(1), cost: 6706.79 tasks: 10187 time: 0.024 net: …
Run Code Online (Sandbox Code Playgroud) 我是一名 SQL Server DBA。为了自动执行一些日常任务,我需要编写存储过程。在没有测试的情况下创建功能对我来说没有意义。为了创建和运行我的测试,我使用了 tSQLt 框架。
我必须在测试期间创建一个数据库。多语句事务内不允许“CREATE DATABASE”,但所有测试都会在 tSQLt Framework 内的事务内自动运行。
当然,我可以在运行测试之前手动设置测试数据库,但测试不能依赖于执行它的环境。
应该如何处理这个问题?