- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 tSQLt 对 t-sql 代码进行单元测试。
很多时候,测试的安排部分非常广泛,我试图将其中的大部分内容推送到设置过程中,以便在类内的测试中重用。
如果设置和测试程序可以“知道”相同的信息,即有一些共享数据,那将非常有用。例如,假设安装程序创建一个测试发票并将发票 ID 设置为已知的:
CREATE PROCEDURE [InvoiceManager].[SetUp]
AS
DECLARE @TestId INT = 10;
EXEC tsqlt.FakeTable @SchemaName='dbo', @TableName='Invoice';
INSERT INTO dbo.Invoice (Id, Amount) VALUES (@TestId, 20.50);
GO
然后在测试中我们要对测试发票做一些事情,像这样:
CREATE PROCEDURE [InvoiceManager].[Test_InvoiceHandler]
AS
DECLARE @TestId INT = 10; -- duplication I would like to eliminate
-- Action
EXEC dbo.InvoiceHandler @InvoiceId = @TestId;
-- Assert
-- ... some assertions
GO
如果能够通过将 @TestId 的值插入 SetUp 过程中的某个“类变量”中,然后在测试中使用它来替换在两个(以及更多)过程中重复的 @TestId 值,那就太好了。任何想法如何以紧凑的方式实现它?我可以想象在 [InvoiceManager] 模式中创建一个表并在测试中读取它。任何可能存在这样的事情只是我在文档中找不到它?谢谢!
最佳答案
一种方法是改变您的设置方式。您可以在测试模式上创建一个新过程,而不是在 SetUp 过程中定义“排列”数据。例如,InvoiceManager.Arrange。此过程可以将您的 @TestId 作为输入参数。然后,您将从每个测试过程中调用 InvoiceManager.Arrange。我经常使用这种技术而不是使用 SetUp 并发现它工作得很好。尽管我需要从每个测试过程中显式调用它,但我发现如果它很复杂,我可以将我的 Arrange 步骤分解为多个命名良好的存储过程。
这里有一个例子来说明我将如何解决你的问题:
CREATE PROCEDURE [InvoiceManager].[Arrange]
@TestId INT
AS
EXEC tsqlt.FakeTable @SchemaName='dbo', @TableName='Invoice';
INSERT INTO dbo.Invoice (Id, Amount) VALUES (@TestId, 20.50);
GO
CREATE PROCEDURE [InvoiceManager].[Test_InvoiceHandler]
AS
DECLARE @TestId INT = 10;
EXEC InvoiceManager.Arrange @TestId;
-- Action
EXEC dbo.InvoiceHandler @InvoiceId = @TestId;
-- Assert
-- ... some assertions
GO
关于sql-server - tSQLt:在 SetUp 和测试之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29231212/
使用 tSQLt 1.0.5873.27393,我正在尝试为存储过程编写 tSQLt 测试,该过程记录在 CATCH 中捕获的错误。在将错误重新抛出到调用 session 之前阻止到日志表。 我可以成
我最近正在调用一个程序,该程序在代码中包含一个rasierror。抬高筹码的人正处于试捕区。同样,BEGIN TRAN在加注程序之后位于同一 try catch 块中。如果事务中发生错误,则Catch
我是 tSQLt 的新手,在进行真正应该非常简单的测试时遇到了一些困难。 我在存储过程中执行的 SELECT 语句中添加了一列。 如何在 tSQLt 测试中测试该列是否包含在该存储过程的结果集中? 最
我是 tSQLt 的新手,在进行真正应该非常简单的测试时遇到了一些困难。 我在存储过程中执行的 SELECT 语句中添加了一列。 如何在 tSQLt 测试中测试该列是否包含在该存储过程的结果集中? 最
是否可以忽略tSQLt AssertEqualsTable中几乎肯定会有所不同的某些列?示例是来自两个结果表的主键,插入/更新日期戳等。 我一直在通过仅在新的临时表中选择相关列并进行比较来解决此问题,
首先,我应该指出,我对 Atlassian 的 Bamboo 和持续集成总体来说还是个新手。这是我使用其中任何一个的第一个项目。 我使用 tSQLt 框架创建了大量单元测试。我还将 Bamboo 配置
有什么办法可以找到tSQLt的版本号吗?安装在数据库上? 请注意,tSQLt 是 SQL Server 而非 T-SQL 的测试框架。 (请不要投票关闭不相关的副本。) 最佳答案 从源代码来看,似乎有
我正在使用 Red Gate SQL Developer 开发数据库工具。 SQL Test ,运行 tSQLt 测试的 SSMS 加载项缺少重命名测试类的方法。 我有一个名为 [BackendLay
这是场景: 存储过程sproc_a调用sproc_b。然后sproc_b调用sproc_c。典型的嵌套过程。 Sproc_a 执行了 SET XACT_ABORT ON;并使用命名事务。 Sproc_
我有一个曾经可以工作的安装,但现在似乎不行。想知道是否有其他人经历过这种情况。 曾经运行过的测试现在不运行了。似乎什么都没有运行。输出始终如下: +----------------------+ |测
在tSQLt中,我们可以使用AssertEqualsTable命令比较2个表。 但是,有什么方法可以断言表中的值是否已更改了一定数量? 例如: 表A:AccID |余额 表B:AccID |余额 tS
我有一个 tSQLt 测试,我预计它会失败,但它运行成功。当我在过程外运行代码时,它按预期失败了,但是当使用 Run 执行测试时,没有发生错误。 我已阅读问题 tSQLt Testing SQL Se
我最近一直在对调用包含(持久)计算列的表的过程编写一些 tSQLt 数据库单元测试(通过 Red Gate SQL Test),请注意,如果我使用 FakeTable SP,我发现计算列是未填充(它们
用于 SQL 单元测试的 Redgate 工具 SQLTest 现在能够从 SQLCop 添加测试。然而 Redgate 工具只附带了很少的预构建测试。 由于测试只是存储过程,我确信有人已经实现了更多
每当我使用 ExpectException 时,我都会收到以下错误:(还有一个 ROLLBACK 错误 --> 当前事务无法提交且无法回滚到保存点。回滚整个事务。{Private_RunTest,14
我对 tSQLt 数据库单元测试框架还很陌生。我有一个使用 3 个表的存储过程。每个表需要 15 行数据。我还需要另一个假表来验证结果。但是使用 INSERT 准备假表容易出错且难以维护。 为 tSQ
我刚开始使用tsqlt在redgate的sql测试里面。我必须处理遗留数据库中相当大的表(大量列)。将一些假数据插入此类表的最佳做法是什么(“脚本作为”插入语句非常大) - 因此它们会使我的单元测试的
我正在使用 tSQLt 对 t-sql 代码进行单元测试。 很多时候,测试的安排部分非常广泛,我试图将其中的大部分内容推送到设置过程中,以便在类内的测试中重用。 如果设置和测试程序可以“知道”相同的信
exec tSQLt.SetFakeViewOn 'dbo.viewWithIssues'; GO CREATE PROCEDURE TestChanges.[Test Data] AS BEG
当尝试在存储过程中验证用户提供的 GUID 时,使用了一种简单的方法;将用户输入作为 CHAR(36),然后在 TRY CATCH 中将其显式转换为 UNIQUEIDENTIFIER。然后,CATCH
我是一名优秀的程序员,十分优秀!