【发布时间】:2013-09-16 17:12:03
【问题描述】:
有什么方法可以在 Visual Studio 中以类似于 NUnit 的方式公开 tSQLt 测试?
更好,因此解决方案中的所有测试都可以使用 Resharper 运行
...我知道 Red Gates SQL Test 产品,但它似乎只针对 SSMS
【问题讨论】:
标签: visual-studio testing nunit tsqlt
有什么方法可以在 Visual Studio 中以类似于 NUnit 的方式公开 tSQLt 测试?
更好,因此解决方案中的所有测试都可以使用 Resharper 运行
...我知道 Red Gates SQL Test 产品,但它似乎只针对 SSMS
【问题讨论】:
标签: visual-studio testing nunit tsqlt
是的,这实际上非常简单,但确实需要编写一些管道代码。 TestClasses、Tests 和 TestResults 都在 tSQLt 中可用。我们简单地编写了一个 t4 模板来包装我们的 tSQLt 测试,并使用该模板来生成 nunit 测试。我们的 tSQLt 工作流程都在我们的 Visual Studio 项目中,我们使用 FluentMigrator 进行数据库迁移。
如果您有兴趣,我已经在 github (tsqlt-demo-workflow) 上发布了一个 tSQLt 演示工作流解决方案。此工作流程与我们一直在使用的工作流程相似。
希望这会有所帮助。
【讨论】:
听起来您已经将 tSQLt 和测试添加到您的数据库中,并且您想运行它们。如果是这样,很容易将它们公开为 Resharper 可以运行的 NUnit 测试。
在本例中,我使用 NUnit 的 [TestCaseSource] 调用数据库并检索 tSQLt 测试类的名称。您也可以在个人测试级别执行此操作,但这比我需要的更细粒度。返回 TestCaseData 对象中的名称意味着 NUnit 运行器(如 ReSharper)会将每个 tSQLt 测试类列为单独的测试。
[TestCaseSource(nameof(GetSqlTests))]
public void SqlTests()
{
try
{
// tSQLt.Run @testName
var message = new Database().RunTest(TestContext.CurrentContext.Test.Name);
Assert.Pass(message);
}
catch (SqlException ex)
{
Assert.Fail(ex.Message);
}
}
public IEnumerable<TestCaseData> GetSqlTests()
{
// SELECT Name from [tSQLt].[TestClasses]
var names = new Database().GetTestClasses();
return names.Select(name => new TestCaseData().SetName(name));
}
【讨论】:
我编写了一个 Visual Studio 测试,它在 .sql 文件中搜索 tSQLt 测试并且可以使用测试资源管理器窗口运行:
https://the.agilesql.club/blogs/Ed-Elliott/tSQLt-Visual-Studio-Test-Adapter
我正计划编写一个 resharper 插件来让它也运行它们,但我还没有这样做。
埃德
【讨论】: