【发布时间】:2017-03-23 04:42:46
【问题描述】:
我们正在考虑使用 tSQLt 进行 SQL Server 单元测试,但在这样做之前,我们需要了解我们是否会浪费时间尝试使用我们的设置。我问这个的原因是因为我们有两个数据库,其中一个非常“正常”(这是我们的生产数据库),另一个是“API”数据库,它通过“翻转”的存储过程提供对该数据库的受限访问" 在您访问 API 数据库的用户帐户和生产数据库的模拟帐户之间。生产数据库中的表不是直接访问的,而是通过同义词访问的。事务供应来自 API 数据库中的“入口点”存储过程。
我们希望能够测试两个主要的东西;
(1) 对象的安全权限,因为当我们“忘记”在构建之间正确设置安全访问权限时,我们在使用共享对象时可能会遇到问题。
(2) API 存储过程/函数。我认为我们可以相对独立地测试一些功能,但我看不出存储过程如何轻松工作。
- tSQLt 是否支持安全权限测试?
- 我发现跨数据库测试和同义词存在问题,但该信息非常具有历史意义。这些问题现在解决了吗?
- 为什么 tSQLt 需要 CLR 权限?
- tSQLt“代码”是否必须安装在要测试的数据库上,还是我们可以在同一实例上的数据库上运行它?
- 列表项
【问题讨论】:
-
如果你要在生产数据库上运行
test,我猜你不需要使用tSQLt。您可以只创建一个检测错误的 T-SQL 语句,然后通过作业或手动运行它。tSQLt框架只是一个可用于测试的包装器(包含 T-SQL 过程/函数和少量 CLR 的套件)。为了使用它,你应该启用 CLR 并且你应该在你的数据库中deploy/create这些对象。我相信,对于您的情况,您最好开发一个测试程序。 -
我应该澄清一下,“生产”数据库是我们开发测试服务器上生产数据库的副本,而不是实际数据库!我们有一个与 API 数据库对话的网络服务,它与“生产”数据库对话。该“生产”数据库通常由部署在 citrix 上的应用程序使用。
-
基本上,
tSQLt将提供将执行结果与预定义结果进行比较的能力。例如,您需要编写一个is checking if user A has rights to object B的代码,然后使用tSQLt它会引发或不引发错误(取决于您的情况)。所以,你需要做hard的工作,如果你写的是search for issues的T-SQL语句,你就可以简单地执行它。此外,单元测试用于测试单独对象的结果,在您的情况下,我认为您将使用更复杂的业务逻辑。
标签: sql-server tsqlt