前几天我注意到您可以编写一个测试,其中实际表中的列比预期表中的列更多,并且如果数据在两者中都存在的列中匹配,则测试仍将通过。
这是一个例子:
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
当我从不再需要这些列的测试的预期表中删除了一些额外的列时,我注意到了这一点,但是我忘记从实际表中删除相同的列并且我的测试仍然通过了,这对我来说有点令人反感。仅当实际表具有更多列时才会发生这种情况。如果预期有更多列,则会生成错误。这个对吗?有谁知道这种行为背后的原因是什么?