【问题标题】:How do I ignore a column in a tSQLt AssertEqualsTable?如何忽略 tSQLt AssertEqualsTable 中的列?
【发布时间】:2014-07-23 09:46:15
【问题描述】:

是否可以忽略在 tSQLt AssertEqualsTable 中几乎肯定会有所不同的某些列?例如两个结果表中的主键、插入/更新日期戳等等。

我一直在通过仅将相关列选择到新的临时表中并进行比较来解决此问题,但这意味着额外的工作和额外的出错位置。肯定不是很多,但它加起来有几十或几百个测试。

一种内置或简单的方式来表示“比较这两个表但忽略列 X 和 Y”将非常有用。有没有比我现在使用的更好的解决方案?

【问题讨论】:

  • 我一直在想同样的事情。我的解决方案是将被测存储过程的结果转储到临时表中,然后删除我对测试不感兴趣的列:EXEC usp_UpdateUserTable Param1, Param2 SELECT * INTO #actual FROM Users `ALTER TABLE #actual DROP COLUMN [LastUpdated]
  • 如果您提供一个您遇到问题的测试示例,它可能会有所帮助。我无法从问题中看出您在 TDD 和单元测试方面的经验或您对 tSQLt 的了解程度。

标签: tsqlt


【解决方案1】:

您需要做的就是用您感兴趣的列填充#expected 表。当AssertEqualsTable 进行比较时,它将忽略#actual 表中不存在于@987654324 中的任何列@表。

【讨论】:

  • 刚刚测试过,它可以工作,谢谢。我使用 AssertResultSetsHaveSameMetaData 检查表结构是否相同
  • @Alec,我同意 AssertResultSetsHaveSameMetaData 是在一次测试中测试整个表合约的好方法
  • 感谢这个解决方案,只是为了确认一下,我们需要做的就是用我们感兴趣的列创建#expected 对吧?然后填充它?
  • @Saul - 是的,这是正确的。 tSQLt 将忽略实际表中不存在于预期表中的列。
猜你喜欢
  • 1970-01-01
  • 2012-10-07
  • 2020-09-22
  • 2014-04-03
  • 1970-01-01
  • 2019-12-21
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多