gpt4 book ai didi

sql-server - 使用 tSQLt 对计算列进行单元测试

转载 作者:行者123 更新时间:2023-12-02 18:56:33 26 4
gpt4 key购买 nike

我最近一直在对调用包含(持久)计算列的表的过程编写一些 tSQLt 数据库单元测试(通过 Red Gate SQL Test),请注意,如果我使用 FakeTable SP,我发现计算列是未填充(它们评估为 null)。计算列是测试的关键,因此我不能忽略测试中的列,而且我不想重复逻辑。

我正在使用 tSQLt.AssertEqualsTable SP 评估结果,因此我想确保两者中的列值相同。

在实践中,我通过不使用 FakeTable,而是在测试结束时使用(部分)回滚事务语句(根据 http://sqlity.net/en/585/how-to-rollback-in-procedures/ 的博客文章)或显式删除测试值来解决此问题。

我确信一定有更好的方法来编码此测试,并且欢迎任何建议。

最佳答案

测试时应将计算列中的逻辑与过程中的逻辑分开。该过程将获取该列中的信息并对其采取行动。该过程不应该关心该列是计算列还是实际列。这意味着,在您的测试中,您可以硬编码一个值以放入该列中。 FakeTable 通过将任何计算列转换为真实列来实现这一点。

在另一组测试中,您可以(并且应该)测试计算列的计算是否正确。为此,可以使用 FakeTable 的补充。这保留了表的计算属性。您需要将 EXECUTE tSQLt.FakeTable 的 @CompulatedColumn 参数设置为 1。( http://tsqlt.org/user-guide/isolating-dependencies/faketable/ )

顺便说一句,您不需要在测试中回滚任何内容。 tSQLt 已经在处理这个问题了。如果事务管理是该过程的要求,则您提到的文章中描述的逻辑仅在您自己的过程中需要。

关于sql-server - 使用 tSQLt 对计算列进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9415731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com