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:
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.
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? –
@EdElliott Merci d'avoir jeté un œil. J'utilise SQL Server 2008 R2 et Visual Studio 2015 Enterprise Update 3. –