【问题标题】:How to use SSDT to unit test a function using different inputs如何使用 SSDT 对使用不同输入的函数进行单元测试
【发布时间】:2018-02-01 17:11:04
【问题描述】:

我正在浏览创建SSDT Unit Tests 的文档。所有示例都显示了测试存储过程。但是,如果我想测试标量或表值函数,我可以在其中验证给定输入的预期输出。

我知道tSQLt。尽管在该框架中创建单元测试非常容易,但它也与开发数据库紧密绑定。我更喜欢在单独的项目中进行测试。测试在单元测试项目中的事实对我来说是一个巨大的吸引力,这就是为什么我决定花精力让 SSDT 单元测试满足我的需求。

我想出了如何创建一个测试条件。 (见截图)。

测试代码块中,我定义了输入值@ofDate = '2/1/2018',并在属性窗口中定义了预期的输出。

DECLARE @RC AS DATE, @ofDate AS DATE;

SELECT @RC = NULL,
       @ofDate = '2/1/2018';

SELECT @RC = [dbo].[GetMostRecentThursday](@ofDate);

SELECT @RC AS RC;

我可以单击“测试条件”面板中的绿色加号并为标量值添加新的测试条件(例如“如果日期为 '2/2/2018' 然后返回 '2/1/2018'”) ,但我看不到为新测试条件设置唯一输入的方法。

换句话说,如何为特定的测试条件定义唯一的输入参数?我是否需要创建另一个单元测试文件来测试新条件?

【问题讨论】:

  • 您可能应该有 2 个不同的测试(或 3 个,具体取决于您的预期结果)。第一个用于有效输入。第二个用于 InValid 输入,并测试在使用无效输入时是否获得所需的响应。第三个是如果您有 2 个不同的无效响应,即您的值可能低于最小值和高于最大值 有效范围返回 2 个不同的输出。
  • 您应该能够确定有效输入的预期输出,而无需对其进行硬编码。
  • 我不确定您的 SSDT 单元测试做了多远,但只是一个建议 - 看看 tsqlt.org。它比原生 SSDT/VS 单元测试要好得多。
  • @DmitrijKultasev,我查看了 tsqlt。设计测试要容易得多。问题是它与数据库紧密绑定。我想要一些可以轻松保存在单独项目中的东西。

标签: unit-testing sql-server-data-tools


【解决方案1】:

@user7396598 给了我需要弄清楚的提示。关键创建一个新的单元测试,但不是一个新的单元测试类。

虽然有一种“更短”的方法可以执行以下操作,但我更喜欢我所介绍的方法,因为编码器出错的可能性较小。您的样板已正确设置,因此您可以专注于需要为测试设置的特定项目。

  1. 右键单击您正在测试的函数并创建单元测试。

  1. 这是关键:将单元测试插入到预先存在的测试类中

  1. 看起来很眼熟,但这就是重点。您需要做的就是设置输入值和测试条件。

这就是添加新测试的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-29
    • 2021-08-21
    • 2021-01-29
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    相关资源
    最近更新 更多