На днях я заметил, что вы можете написать тест, в котором в фактической таблице больше столбцов, чем в ожидаемой таблице, и тест все равно пройдет, если данные совпадают в столбцах, которые существуют в обоих.
Вот пример:
if exists(select * from INFORMATION_SCHEMA.ROUTINES where ROUTINE_SCHEMA='UnitTests_FirstTry' and ROUTINE_NAME='test_AssertEqualsTable_IgnoresExtraColumnsInActual')
begin
drop procedure UnitTests_FirstTry.test_AssertEqualsTable_IgnoresExtraColumnsInActual
end
go
create procedure UnitTests_FirstTry.test_AssertEqualsTable_IgnoresExtraColumnsInActual
as
begin
IF OBJECT_ID(N'tempdb..#Expected') > 0 DROP TABLE [#Expected];
IF OBJECT_ID(N'tempdb..#Actual') > 0 DROP TABLE [#Actual];
create table #expected( a int null) --, b int null, c varchar(10) null)
create table #actual(a int, x money null)
insert #expected (a) values (1)
insert #actual (a, x) values (1, 22.51)
--insert #expected (a, b, c) values (1,2,'test')
--insert #actual (a, x) values (1, 22.51)
exec tSQLt.AssertEqualsTable '#expected', '#actual'
end
go
exec tSQLt.Run 'UnitTests_FirstTry.test_AssertEqualsTable_IgnoresExtraColumnsInActual'
go
Я заметил это, когда удалил несколько дополнительных столбцов из таблицы Expected теста, которому эти столбцы больше не нужны, но я забыл удалить те же столбцы из таблицы Actual, и мой тест все еще прошел, что меня немного смутило. Это происходит только тогда, когда в фактической таблице больше столбцов. Если ожидаемое количество столбцов больше, генерируется ошибка. Это правильно? Кто-нибудь знает, в чем причина такого поведения?