2017-05-18 3 views
3

J'écris des tests tSQLt et je les exécute à l'aide de l'Explorateur de test de Visual Studio via l'extension tSQLt test adapter. Je fais TDD, donc j'écris le test avant d'écrire la procédure stockée qu'il teste.Pourquoi un test tSQLt passe-t-il dans Visual Studio Test Explorer en cas d'échec?

Le problème est que lorsque j'exécute le test, il devrait échouer car la procédure stockée n'existe pas encore. Quand je lance le test avec tSQLt dans SQL Server Management Studio échoue comme il se doit:

The module 'test_ValidCustomerName_CustomerIdIs1' depends on the missing object 'dbo.AddCustomer'. The module will still be created; however, it cannot run successfully until the object exists. 

(0 row(s) affected) 
[AddCustomer].[test_ValidCustomerName_CustomerIdIs1] failed: (Error) Could not find stored procedure 'dbo.AddCustomer'.[16,62]{test_ValidCustomerName_CustomerIdIs1,7} 

+----------------------+ 
|Test Execution Summary| 
+----------------------+ 

|No|Test Case Name          |Dur(ms)|Result| 
+--+----------------------------------------------------+-------+------+ 
|1 |[AddCustomer].[test_ValidCustomerName_CustomerIdIs1]|  0|Error | 
----------------------------------------------------------------------------- 
Msg 50000, Level 16, State 10, Line 1 
Test Case Summary: 1 test case(s) executed, 0 succeeded, 0 failed, 1 errored. 
----------------------------------------------------------------------------- 

Mais quand je le lance dans le test Explorer, il dit que le test passe:

test explorer screenshot

ici est le code pour le test:

EXEC tSQLt.NewTestClass 'AddCustomer'; 
GO 

CREATE PROCEDURE AddCustomer.test_ValidCustomerName_CustomerIdIs1 
AS 
BEGIN 
    DECLARE @customerName NVARCHAR(40) = 'John Doe' 

    EXEC dbo.AddCustomer @customerName 

    DECLARE @expected INT  = 1 
      , @actual  INT  = (SELECT CustomerID 
            FROM dbo.Customer 
            WHERE Name = @customerName) 

    EXEC tSQLt.AssertEquals @expected, @actual 
END 
GO 

Et voici la table dbo.Customer:

CREATE TABLE dbo.Customer 
(
    CustomerID INT    NOT NULL PRIMARY KEY IDENTITY(1, 1) 
    , Name  NVARCHAR(50) NOT NULL 
) 

EDIT - J'ai modifié le test pour appeler juste tSQLt.Fail:

EXEC tSQLt.NewTestClass 'AddCustomer'; 
GO 

CREATE PROCEDURE AddCustomer.test_ValidCustomerName_CustomerIdIs1 
AS 
BEGIN 
    EXEC tSQLt.Fail 'Test should fail' 
END 
GO 

Le test échoue encore dans SQL Server Management Studio mais passe dans le test Explorer.

+0

Hey Lews - J'ai essayé cette chose exacte et il fonctionne pour moi - pouvez-vous me dire la version de SQL Server et Visual Studio que vous utilisez? –

+0

@EdElliott Merci d'avoir jeté un œil. J'utilise SQL Server 2008 R2 et Visual Studio 2015 Enterprise Update 3. –

Répondre