2017-05-18 4 views
3

Ich schreibe einige tSQLt-Tests und starte sie mit Visual Studio Test Explorer über die tSQLt test adapter Erweiterung. Ich mache TDD, also schreibe ich den Test vor dem Schreiben der gespeicherten Prozedur, die es testet.Warum wird ein tSQLt-Test in Visual Studio Test Explorer bestanden, wenn er fehlschlagen sollte?

Das Problem ist, wenn ich den Test ausführen, sollte es fehlschlagen, weil die gespeicherte Prozedur noch nicht existiert. Wenn ich den Test mit tSQLt in SQL Server Management Studio scheitert es, wie es sollte:

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. 
----------------------------------------------------------------------------- 

Aber wenn ich es in Test Explorer ausführen, heißt es der Test bestanden:

test explorer screenshot

Hier für den Test ist der Code:

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 

Und hier ist die dbo.Customer Tabelle:

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

EDIT - ich habe den Test modifiziert nur tSQLt.Fail zu nennen:

EXEC tSQLt.NewTestClass 'AddCustomer'; 
GO 

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

Der Test schlägt fehl noch in SQL Server Management Studio, aber es geht in Test Explorer.

+0

Hey Lews - Ich habe genau dieses Ding ausprobiert und es funktioniert für mich - können Sie mir die Version von SQL Server und Visual Studio Sie verwenden sagen? –

+0

@EdElliott Danke für einen Blick. Ich verwende SQL Server 2008 R2 und Visual Studio 2015 Enterprise Update 3. –

Antwort

0

Ich habe den Testadapter auf Visual Studio 2017 aktualisiert und ein paar Probleme behoben. Ich habe diesen Code hier ausgeführt und kann ihn nicht reproduzieren (die Tests verursachen einen Fehler im Visual Studio).

Besorgen Sie sich die neueste Version von:

https://marketplace.visualstudio.com/items?itemName=vs-publisher-263684.tSQLtTestAdapterforVisualStudio2017

Wenn Sie vs 2015 Unterstützung benötigen lassen Sie mich wissen, ich bin zögerlich, da es bedeutet, dass zwei Versionen beibehalten wird.

ed

Verwandte Themen