【问题标题】:SQL Features that might cause problems for tSQLt可能导致 tSQLt 出现问题的 SQL 功能
【发布时间】: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


【解决方案1】:

tSQLt 是否支持安全权限测试?

间接的。您可以使用 ExpectException 和 ExpectNoException 功能来测试给定帐户是否有权访问特定对象。

同义词

AFAIK 你仍然不能伪造指向远程对象的同义词。不过,你可能会更幸运地伪造视图。

为什么 tSQLt 需要 CLR 权限?

如果您的意思是 TRUSTWORTY,则不再需要 (http://tsqlt.org/748/tsqlt-v1-0-5873-27393-release-notes/)。如果您的意思是“为什么它根本需要 CLR”,这是因为有些操作本身很难或不可能用 T-SQL 完成;大胆尝试一下早期的 tsqlunit。

tSQLt“代码”是否必须安装在要测试的数据库上

是的。


我要补充的是,如果您正在测试两个数据库之间的交互,那么区分头发的部门可能会说这不是真的单元测试。编写一个普通的旧 NUnit/MSTest/whateverUnit 测试可能更容易。过去,我曾在 Nunit 和 Dapper(stackoverflow 的名声)组合轻量级数据库测试方面取得了一些运气。

【讨论】:

    猜你喜欢
    • 2021-03-18
    • 2018-04-21
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 2018-04-23
    • 2011-04-01
    • 2015-03-01
    • 1970-01-01
    相关资源
    最近更新 更多