1

我正在使用 SQL Test 在 SQL Server 中创建一些单元测试。我与 Teamcity 集成,因此在构建时,它会自动运行 tSQLt 测试。

问题是我们计划为我们所有的商店过程创建数百个单元测试。而且我们不想在每次签入代码时都运行所有单元测试,而 Teamcity 运行构建 + 运行所有单元测试。

有没有办法将集成构建配置为仅运行签入的新单元测试。我需要为此创建一个自定义脚本吗?我似乎无法找到摆脱困境的方法。

还是在没有 Teamcity 自动运行 tSQLt 单元测试的情况下签入的实用解决方案?因此,只需在 DEV 服务器上手动运行新的测试用例(签入后)?对此的扩展是每晚运行批处理以运行所有单元测试。

4

3 回答 3

5

是否有特殊原因,您不希望每次签入时都在构建服务器上运行所有测试?

在我目前正在进行的项目中,我们有超过 1000 个 tSQLt 测试和另外 3000 个代码测试。每次签到时都会运行我们所有的测试。

我不再使用 SQL 测试来编写我的 tSQLt 测试,因为我已将我的数据库单元测试集成到我的 Visual Studio 项目中。我有一个 T4 模板,它围绕我的 tSQLt 测试创建 NUnit 包装器,就我的构建服务器而言,它只是在运行 tSQLt 单元测试时运行一组常规 NUnit 测试。这意味着如果我选择的话,我可以使用 NUnit 类别等来控制在构建服务器上运行哪些测试以及何时运行它们(即每次,仅在夜间构建期间)。

有关我如何执行此操作的示例,请参见 ( https://github.com/chilli-andrew/ )。这可能不适合您的工作流程,但值得一看以了解如何使用 tSQLt。

于 2014-01-14T08:30:09.500 回答
2

您可以使用测试类将您希望在每次签入时运行的任何“第 1 层”测试与您希望不那么频繁地运行的其他测试分开,而不是每次只运行新测试。

使用特定模式创建测试类。然后,您可以使用 SQL 比较/源代码控制过滤器来排除您不想在每次提交时测试的任何模式。

这感觉比只运行新测试更安全。如果您只运行新测试,那么您不知道您的更改是否破坏了现有功能。

更新: SQL CI 和 Team City 插件现在允许您指定要包含/排除的任何类,而不仅仅是运行 tSQLt.RunAll。

于 2014-01-14T13:03:46.833 回答
1

我不确定您是如何为 CI 服务器创建 tsqlt 结果的,但如果您正在使用

EXEC tSQLt.RunWithXmlResults 

要生成测试输出,您可以使用的另一个可能选项是。

EXEC tSQLt.SetTestResultFormatter 'tsqlt.xmlresultformatter'
EXEC tSQLt.Run 'UnitTests_YourUnitTestClass'
EXEC tSQLt.SetTestResultFormatter 'tsqlt.defaultresultformatter'
于 2014-01-16T12:54:40.300 回答