单元测试用例说明



我很感激这里可能不是问的地方,如果有更好的地方,请告诉我。

我有一个遗留的存储过程,它选择一些数据并插入到表中。然而,我想测试一些案例陈述,我想知道应该如何做到这一点。

insert into [dbo].[utb_ITP]
...
case when [sme].[Reporting Countries] = 'Multiple Countries'
then 'United Kingdom-Multiple Countries'
when patindex('%-$',[sme].[Reporting Countries) > 1
then left([sme].[Reporting countries], (pat index('%-%', [sme].[Reporting Countries]) - 1 ))
else [sme].[Reporting Countries]
end as [SVC_COUNTRY]

我认为我看到的示例都是在嘲笑数据和测试函数,但我还没有真正看到像案例陈述这样的示例。我是测试最终输出还是测试组成部分?所以我会先测试

[sme].[Reporting Countries] = 'Multiple Countries'
then 'United Kingdom-Multiple Countries'

在这种情况下,我会使用一个AssertEqualsTable,其中预期值为"英国多个国家",然后插入实际值将运行案例的第一部分,类似于:

insert into #Expected values ('United Kingdom-Multiple Countries')
insert into #Actual
select case [sme].[Reporting Countries] = 'Multiple Countries'
then 'United Kingdom-Multiple Countries'
end
from   [SourceTable] as [sme]
where [sme].[Reporting Countries] = 'Multiple Countries'
exec AssertEqualsTable ...

你走在了正确的轨道上。您确实希望隔离CASE语句的那些分支。这意味着您需要为其中每个可能的分支编写一个测试

您还希望将这些测试与其他功能隔离开来。这意味着,伪造所有涉及的表,然后插入足够的行(在这些测试中可能是1(来证明这一点。tSQLt.FakeTable允许您仅将数据放在与测试此特定功能相关的列中。在您的情况下,它看起来可能只是[sme].[Reporting Countries]列。

因此,您想为'Multiple Countries'编写一个测试,为PATINDEX编写两个测试(例如'value-withdash''othervalue-withdash'(,最后为ELSE分支编写一个(例如'other value without dash'(。

在测试中,我更倾向于确保测试的意图是明确的,而不是值是现实的。

如果在INSERT中有其他case语句,请按照相同的模式为这些语句编写独立的测试。

相关内容

  • 没有找到相关文章

最新更新