Почему тест tSQLt проходит в обозревателе тестов Visual Studio, когда он должен провалиться?

Я пишу несколько тестов tSQLt и запускаю их с помощью обозревателя тестов Visual Studio через тестовый адаптер tSQLt. Я выполняю TDD, поэтому пишу тест перед написанием хранимой процедуры. что он тестирует.

Проблема в том, что когда я запускаю тест, он должен завершиться ошибкой, потому что хранимая процедура еще не существует. Когда я запускаю тест с tSQLt в Sql Server Management Studio, он терпит неудачу, как и должен:

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

Но когда я запускаю его в Test Explorer, он говорит, что тест пройден:

скриншот тестового обозревателя

Вот код для теста:

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

А вот таблица dbo.Customer:

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

EDIT. Я изменил тест, чтобы просто вызывать tSQLt.Fail:

EXEC tSQLt.NewTestClass 'AddCustomer';
GO

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

Тест по-прежнему не проходит в Sql Server Management Studio, но проходит в обозревателе тестов.


person Lews Therin    schedule 18.05.2017    source источник
comment
Привет, Льюс. Я попробовал именно это, и у меня это работает. Можете ли вы сказать мне версию SQL Server и Visual Studio, которые вы используете?   -  person Ed Elliott    schedule 18.05.2017
comment
@EdElliott Спасибо, что посмотрели. Я использую SQL Server 2008 R2 и Visual Studio 2015 Enterprise Update 3.   -  person Lews Therin    schedule 18.05.2017


Ответы (1)


Я обновил тестовый адаптер до Visual Studio 2017 и исправил пару проблем. Я запустил этот код здесь и не могу его воспроизвести (тесты вызывают сбой в Visual Studio).

Возьмите последнюю версию с:

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

Если вам нужна поддержка по сравнению с 2015, дайте мне знать, я сомневаюсь, поскольку это означает поддержку двух версий.

ed

person Ed Elliott    schedule 03.10.2017