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:
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.
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? –
@EdElliott Danke für einen Blick. Ich verwende SQL Server 2008 R2 und Visual Studio 2015 Enterprise Update 3. –