【问题标题】:tSQLt test cases for database insert and update via stored procedures通过存储过程进行数据库插入和更新的 tSQLt 测试用例
【发布时间】:2019-08-18 11:56:25
【问题描述】:

我想通过存储过程为数据库插入和更新编写 tSQLt 测试用例。

我按照tSQLt的官方文档,将CLR安装到数据库中。

当我安装 tSQLt 时,我可以看到多个表和数百个存储过程被导入。不确定运行 tSQLT 测试是否真的需要这些。

并创建了程序

    USE [Speciman_Order]
    GO
    /****** Object:  StoredProcedure [AccessionDetailsTest].[Fetch Records]    Script Date: 8/18/2019 6:51:42 PM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [AccessionDetailsTest].[Fetch Records]
    AS
    BEGIN
        DECLARE @TIMEINTERVAL int = 24;
        DECLARE @rowCount int;
        DECLARE @CURRENTTIME datetimeoffset = SYSDATETIMEOFFSET()

        SELECT 
            *
        FROM 
            Accession
        WHERE 
            OrderStatus = 'UC' and SWITCHOFFSET(AccessionDate, DATENAME(TZ, SYSDATETIMEOFFSET())) <= DATEADD(hh, -@TIMEINTERVAL, @CURRENTTIME) 
            and SWITCHOFFSET(AccessionDate, DATENAME(TZ, SYSDATETIMEOFFSET())) <= @CURRENTTIME

        SET @rowCount = @@ROWCOUNT;

        EXEC tSQLt.AssertEquals 25000, @rowCount
    END;

    EXEC tSQLt.Run AccessionDetailsTest

当我尝试多次运行它时,它会抛出一个错误,指出该过程已经存在。不知道如何在安装过程中导入的大量程序中找到测试和类。

当我运行它时。我得到 0 次执行,每个字段都是 0 计数。

请帮助创建用于数据库插入和更新查询的 tSQLt 测试用例。我还阅读了一些关于模拟数据库而不是实时插入和更新的内容。请帮助我理解这个概念

【问题讨论】:

    标签: sql sql-server tsqlt


    【解决方案1】:

    测试是一个普通的存储过程。因此,所有相同的规则都适用。例如,要在它已经存在时对其进行更改,您需要先更改它,先手动删除它,或者将它放在创建类的同一脚本中,因为tSQLt.NewTestClass 处理删除。

    但是有一个重要区别:要被识别为测试,存储过程名称需要以四个字母“test”开头。

    此外,所有 tSQLt 对象都存在于 tSQLt 模式中,因此应该很容易将它们与您创建的对象区分开来。 是的,我没有写所有这些 tSQLt 对象,因为我很无聊,想填满你的数据库。它们都有一个重要的功能。

    【讨论】:

    • 你能帮我编写一个选择表格的 1 行的小选择测试程序吗?所以我可以测试剩余的插入、选择、更新 sp。
    • 根据您的建议,我创建了该过程并通过 tSQLt run testname 运行它。但是,我仍然可以看到 0 次执行和 0 次错误。我在问题中更改了我的程序。请您看一看。
    【解决方案2】:

    添加CREATE OR ALTER PROCEDURE... 而不是CREATE PROCEDURE 这不会给您错误的过程已经存在并且对于记录计数首先运行从您的过程中选择查询分别检查您正在查找的表中是否存在记录。

    【讨论】:

    • 'CREATE OR REPLACE' 是 Oracle 语法。 'CREATE OR ALTER' 适用于 SQL Server 2016 SP1 及更高版本。
    • 嗯,是的..你是对的,我使用了 oracle 语法,将更新我的答案,谢谢队友!
    • 在我的过程中更改 alter 导致“无效的对象名称 'AccessionDetailsTest.Fetch Records”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多