使用Teamcity集成配置SQL测试

时间:2014-01-14 06:52:46

标签: sql-server unit-testing teamcity redgate tsqlt

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

问题在于我们计划为所有商店推销创建数百个单元测试。而且我们不想在每次检入代码时运行所有单元测试,而Teamcity运行build +运行所有单元测试。

是否有办法将集成构建配置为仅运行已签入的新单元测试。我是否需要为此创建自定义脚本?我似乎找不到开箱即用的方法。

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

3 个答案:

答案 0 :(得分:5)

是否有特殊原因导致您不希望每次办理登机手续时都在构建服务器上运行所有测试?

我正在进行的项目中有超过1000个tSQLt测试,另有3000个代码测试。我们所有的测试都会在每次办理登机手续时运行。

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

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

答案 1 :(得分:2)

每次您都可以使用test classes来分离您希望在每次签入时运行的任何“第1层”测试,而不是仅运行新测试,而不是仅运行您想要运行频率较低的其他测试。

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

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

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

答案 2 :(得分:1)

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

EXEC tSQLt.RunWithXmlResults 

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

EXEC tSQLt.SetTestResultFormatter 'tsqlt.xmlresultformatter'
EXEC tSQLt.Run 'UnitTests_YourUnitTestClass'
EXEC tSQLt.SetTestResultFormatter 'tsqlt.defaultresultformatter'