tSQLt不会将命名错误的约束(PK_dbo…)应用于假表

tSQLt不会将命名错误的约束(PK_dbo…)应用于假表,tsql,tsqlt,Tsql,Tsqlt,将tSQLt测试添加到现有生产产品中,因此我们无法更改表、约束等。当前,所有约束都标记为“PK_dbo.ViolationCategory”,而它们应该标记为“PK_ViolationCategory” 当我跑步时: EXEC tSQLt.NewTestClass 'AdHocReportFiltersTestConstraint'; GO CREATE PROCEDURE [AdHocReportFiltersTestConstraint].[Setup] A

将tSQLt测试添加到现有生产产品中,因此我们无法更改表、约束等。当前,所有约束都标记为“PK_dbo.ViolationCategory”,而它们应该标记为“PK_ViolationCategory”

当我跑步时:

    EXEC tSQLt.NewTestClass 'AdHocReportFiltersTestConstraint';
    GO

    CREATE PROCEDURE [AdHocReportFiltersTestConstraint].[Setup]
    AS
    BEGIN
        EXEC tSQLt.FakeTable 'dbo.AdHocReports'
    END
    GO


    CREATE PROCEDURE [AdHocReportFiltersTestConstraint].[test_AdHocReportFilters_Constraint]
    AS
    BEGIN
        DECLARE @Id uniqueidentifier = NEWID()  
        DECLARE @Name NVARCHAR(Max) = 'Test_Name'
        DECLARE @Value NVARCHAR(Max) = 'Test_Value'
        DECLARE @AdHocReport_ID uniqueidentifier = NEWID()  

        INSERT INTO dbo.AdHocReportFilters ([Id], [Name], [Value], [AdHocReport_Id])
            VALUES (@Id, @Name, @Value, @AdHocReport_ID)

            exec tSQLt.ApplyConstraint 'dbo.AdHocReports', 'PK_dbo.AdHocReportFilters';

    END


    EXEC tSQLt.RunTestClass 'AdHocReportFiltersTestConstraint';
    GO
我收到错误信息

(1 row affected)
[AdHocReportFiltersTestConstraint].[test_AdHocReportFilters_Constraint] failed: 
(Error) The INSERT statement conflicted with the FOREIGN KEY constraint 
"FK_dbo.AdHocReportFilters_dbo.AdHocReports_AdHocReport_Id". The conflict occurred in 
database "CR", table "dbo.tSQLt_tempobject_fbc9c8bf09e742929eccae914d5e440d", 
column 'Id'.[16,0]{test_AdHocReportFilters_Constraint,11}
有没有办法解决这个问题


一旦我开始工作,我将添加第二条记录来违反PK约束并捕获错误

看看你的代码,我看到你在做以下事情:

伪造表dbo.AdHocReports 在表dbo.AdHocReportFilters中插入一行 将名为PK_dbo.AdHocReportFilters的PK约束应用于表dbo.AdHocReports 然后,您将尝试添加另一行以验证PK_dbo.AdHocReportFilters约束 您得到的错误似乎表明您违反了AdHocReportFilters表上的外键-这是预期的,因为该表没有被伪造

测试名称不清楚您是在尝试验证主键还是外键的行为

查看这些步骤,我认为您可能混淆了这两个表,但如果没有更详细的代码(即创建表语句),我很难进一步帮助您。

有两个表:

dbo.AdHocReports (Id,... (more columns))
dbo.AdHocReportFilters ([Id], [Name], [Value], [AdHocReport_Id] ) 
AdHocReportFilters.AdHocReports\u Id是表dbo.AdHocReportFilters引用dbo.AdHocReports.Id的外键

在表AdHocReportFilters中插入插入行时,应确保AdHocReportFilters.AdHocReport_Id是表dbo.AdHocReports中的Id列

但是在您的SP中,@AdHocReport_ID是NEWID,这当然是一个唯一的值,因此不在表dbo.AdHocReports.ID中

围绕

禁用外键约束


你想做什么?对不起。补充澄清。。。一旦我开始工作,我将添加第二条记录来违反PK约束并捕获错误
ALTER TABLE dbo.AdHocReportFilters NOCHECK CONSTRAINT FK_dbo.AdHocReportFilters_dbo.AdHocReports_AdHocReport_Id