Dav*_*een 6 sql-server tdd tsqlt
我一直在编写一些tSQLt数据库单元测试(通过Red Gate SQL测试)最近调用包含(持久)计算列的表的程序,并注意如果我使用FakeTable SP,我发现计算列没有填充(他们评价为null).计算列是测试的关键,所以我不能只忽略测试中的列,而我宁愿不复制逻辑.
我正在使用tSQLt.AssertEqualsTable SP评估结果,因此我想确保两者中的列值相同.
在实践中,我通过不使用FakeTable来解决这个问题,但是在测试结束时使用(部分)回滚事务语句(根据http://sqlity.net/en/585/how-上的博客文章)to-rollback-in-procedures /)或显式删除测试值.
我确信必须有更好的方法来编写这个测试,并欢迎任何建议.
测试时,应将计算列中的逻辑与过程中的逻辑分开。该过程将获取该列中的信息并对其进行操作。该过程不应在乎该列是计算列还是实列。这意味着,在测试中,您可以将值硬编码以放入该列中。FakeTable通过将任何计算列转换为实列来实现这一点。
在另一组测试中,您可以(并且应该)测试所计算的列是否正确计算。为此,可以添加FakeTable。这将保留表的计算属性。您需要将EXECUTE tSQLt.FakeTable的@ComputedColumn参数设置为1。(http://tsqlt.org/user-guide/isolating-dependencies/faketable/)
顺便说一句,您不需要在测试中回滚任何内容。tSQLt已经在解决这个问题。如果事务管理是该过程的要求,则仅在您自己的过程中才需要您所提到的文章中描述的逻辑。
现在邮件列表上提供了 tSQLt 的预发布更新:http ://groups.google.com/group/tsqlt
预发行版包含在 FakeTable 期间保留计算列或默认值的功能。
示例:
EXEC tSQLt.FakeTable 'dbo.tst1', @CompulatedColumns = 1;
EXEC tSQLt.FakeTable 'dbo.tst1', @Defaults = 1;
这些将很快准备好正式发布。
| 归档时间: |
|
| 查看次数: |
667 次 |
| 最近记录: |