【问题标题】:What order the test cases run in the tSQLt?测试用例在 tSQLt 中运行的顺序是什么?
【发布时间】:2022-01-06 21:16:35
【问题描述】:

我在“EmployeeSchema”中有 30 个测试用例。我想知道测试用例在 tSqlt 中以什么顺序运行?如果我知道测试用例的执行顺序,那么我就会一个接一个地改变我的测试用例的执行顺序。请多多指教。

-- Runs all the tests on MyTestClass
EXEC tSQLt.Run 'EmployeeSchema';

【问题讨论】:

    标签: sql-server unit-testing sql-server-2012 tdd tsqlt


    【解决方案1】:

    在测试类中运行所有测试时,tSQLt.Run 将以“随机”顺序运行测试,这意味着tSQLt 将顺序留给 SQL Server 以及它如何检索数据。虽然,它们运行的​​顺序并不重要,因为每个测试本身应该是独立的。

    如果出于某种原因您想以不同的顺序运行单个测试,则需要以您想要的顺序为每个单独的测试单独运行tSQLt.Run。当您为整个测试类调用 tSQLt.Run 时,您无法指定特定的顺序。

    注意:感谢@Sebastian Meine 纠正我

    为了确认它是 random 执行计划相关的,这里是来自tSQLt.Private_RunTestClass 的游标声明,它在请求的测试类中提取测试列表。没有ORDER BY,因此 SQL Server 将按照它认为合适的顺序返回测试名称。

    DECLARE testCases CURSOR LOCAL FAST_FORWARD 
        FOR
     SELECT tSQLt.Private_GetQuotedFullName(object_id)
       FROM sys.procedures
      WHERE schema_id = @TestClassId
        AND LOWER(name) LIKE 'test%';
    

    【讨论】:

    • 这是不正确的。 tSQLt 以随机顺序执行测试用例。 (它在过去的某个时间点按字母顺序排列,尽管文档总是谈到随机顺序。)
    • 哦,你是对的。我只是查看了代码,它不包含排序,所以它肯定会按照没有 ORDER BY 的任何东西以随机顺序运行。感谢那!更新了我的答案。
    • 我对我拥有的几个测试类进行了测试运行,它们都按字母顺序返回,所以我做出了那个(不正确的)假设......
    • 所以“不保证”和“取决于执行计划”而不是实际随机化。如果执行计划在sys.sysschobjs.nc1 和查找上有搜索,那么很可能它们将按名称排序,因为它是nsclass, nsid, name,并且它在两个前导列上执行相等。随机意味着用ORDER BY NEWID() 或类似的东西故意改组
    • 我在很久以前进行了这个更改,但它可能还没有发布:github.com/tSQLt-org/tSQLt/blob/… ——但是,我们将在明天发布最新版本,其中包含故意的随机顺序。无论哪种方式,都无法保证顺序,因为从未实施过明确的固定顺序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2015-05-04
    • 2019-07-20
    相关资源
    最近更新 更多