当我尝试将tSQLt安装到现有数据库时,我收到以下错误:
记录在主数据库中的数据库所有者SID与记录在数据库''中的数据库所有者SID不同.您应该通过使用ALTER AUTHORIZATION语句重置数据库''的所有者来纠正这种情况.
faketable功能没有重新分配到正常.我现在使用faketable的所有表都包含我在单元测试插入中使用的值的内容.它是很多表,它使我的数据库无用.请帮助解决这个问题或至少是它的原因.这让我非常担心在CI部署过程中使用它,可能更重要的是在我们的本地开发工作中.
我已经开始使用tsqlt了,我的问题是,是否有可能只有测试内容的单独数据库?(表/ sp /汇编等).
此测试数据库将与实际/目标数据库位于同一实例上.
如果我试图伪造一个表,我会收到以下错误:
FakeTable could not resolve the object name, 'target_db.dbo.Sometable'
Run Code Online (Sandbox Code Playgroud)
有没有人有这方面的经验?
谢谢.
我有一个需要SQL Server单元测试的新项目,以及带有VSTS的CI/CD.
以下是所需的功能
针对存储过程的SQL服务器单元测试,为每个测试设置初始目标表并进行清理
在sql中进行单元测试
带有VSTS和Git的CI/CD
易于安装且易于使用
我查看了SSDT 2017,看起来不错.但它似乎缺少一个功能,可以在预测试步骤中的每个测试之间轻松共享通用设置脚本.它可能缺少应该可用于日常使用的其他功能.但我可能错了.
哪个工具更适合2017年的一般sql server单元测试?
sql-server visual-studio tsqlt sql-server-data-tools sql-server-unit-testing
我正在尝试对tSQLt框架进行一些改进,并且大部分时间都已完成,但由于与我未接触过的证书相关的测试仍然很少失败,所以无法做到这一点:
[exec] |18|[InstallExternalAccessKeyTests].[test creates correct certificate in master] | 120|Failure|
[exec] |19|[InstallExternalAccessKeyTests].[test tSQLt can be set to EXTERNAL ACCESS after InstallExternalAccessKey executed] | 333|Failure|
[exec] |20|[InstallExternalAccessKeyTests].[test tSQLtExternalAccessKey install data is signed with same key as tSQLt.clr] | 10|Failure|
Run Code Online (Sandbox Code Playgroud)
失败的错误是:
Expected: %publickeytoken=8c9a92de0f9c7794,%
Actual: tsqltclr, version=1.0.7216.13228, culture=neutral, publickeytoken=8d3f4bf59e4c22fd, processorarchitecture=msil
Run Code Online (Sandbox Code Playgroud)
我将尝试描述我的安装过程。
我使用以下指南安装了此框架源。但是之后我无法启动该项目,因为它失败并出现以下错误,并且整个问题的解决都在该SO帖子中完成:
[exec]
C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets(2482,5):错误MSB3325:无法导入以下密钥文件:tSQLtOfficialSigningKey.pfx。密钥文件可能受密码保护。若要更正此问题,请尝试再次导入证书或使用以下密钥容器名称将证书手动安装到强名称CSP:VS_KEY_C20B79DE0583A5C1 [E:\ Source \ tSQLt \ tSQLtCLR \ tSQLtCLR \ tSQLtCLR.csproj] [exec]
C:\ Windows \ …
我最近安装了SQL Server 2017 Express和localdb(一般可用性).在尝试安装tSQLt框架时,我发现了SQL Server 2017中实现的新安全功能:"clr strict security"选项.这个新的安全功能似乎阻止了tSQLtCLR程序集的创建.SQL错误消息指出:
使用SAFE或EXTERNAL_ACCESS选项对程序集'tSQLtCLR'进行CREATE或ALTER ASSEMBLY失败,因为sp_configure的'clr strict security'选项设置为1. Microsoft建议您使用具有相应登录名的证书或非对称密钥对程序集进行签名UNSAFE ASSEMBLY许可.或者,您可以使用sp_add_trusted_assembly信任程序集.
我已经阅读了与sp_add_trusted_assembly过程相关的Microsoft技术文档,但它似乎假设您能够成功创建程序集.如果你不能首先创建它,那么如何将tSQLtCLR程序集编码为"受信任"?
我一直在编写一些tSQLt数据库单元测试(通过Red Gate SQL测试)最近调用包含(持久)计算列的表的程序,并注意如果我使用FakeTable SP,我发现计算列没有填充(他们评价为null).计算列是测试的关键,所以我不能只忽略测试中的列,而我宁愿不复制逻辑.
我正在使用tSQLt.AssertEqualsTable SP评估结果,因此我想确保两者中的列值相同.
在实践中,我通过不使用FakeTable来解决这个问题,但是在测试结束时使用(部分)回滚事务语句(根据http://sqlity.net/en/585/how-上的博客文章)to-rollback-in-procedures /)或显式删除测试值.
我确信必须有更好的方法来编写这个测试,并欢迎任何建议.
该tSQLt测试框架需要设置TRUSTWORTHY ON数据库,并启用SQL CLR服务器。
为什么需要这些?是否可以在没有 CLR 对象的情况下实现相同/相似的功能?
是否可以忽略在tSQLt AssertEqualsTable中几乎肯定会有所不同的某些列?示例是两个结果表中的主键,插入/更新日期戳等.
我一直在努力解决这个问题,只选择相关列到新临时表中并进行比较,但这意味着需要额外的工作和额外的错误.当然不是很多,但它增加了数十或数百个测试.
一种内置或简单的方式来说'比较这两个表但忽略列X和Y'将非常有用.有没有比我使用的解决方案更好的解决方案?