有没有办法在 Visual Studio 中以类似于 NUnit 的方式公开 tSQLt 测试?
更好的是,解决方案中的所有测试都可以使用 Resharper 运行
...我知道 Red Gates SQL Test 产品,但它似乎只针对 SSMS
有没有办法在 Visual Studio 中以类似于 NUnit 的方式公开 tSQLt 测试?
更好的是,解决方案中的所有测试都可以使用 Resharper 运行
...我知道 Red Gates SQL Test 产品,但它似乎只针对 SSMS
是的,这实际上非常简单,但确实需要编写一些管道代码。TestClasses、Tests 和 TestResults 都在 tSQLt 中可用。我们简单地编写了一个 t4 模板来包装我们的 tSQLt 测试,并使用该模板来生成 nunit 测试。我们的 tSQLt 工作流都在我们的 Visual Studio 项目中,我们使用 FluentMigrator 进行数据库迁移。
如果您有兴趣,我已经在 github ( tsqlt-demo-workflow ) 上发布了一个 tSQLt 演示工作流解决方案。此工作流程类似于我们一直在使用的工作流程。
希望这可以帮助。
我编写了一个 Visual Studio 测试,它在 .sql 文件中搜索 tSQLt 测试,并且可以使用测试资源管理器窗口运行:
https://the.agilesql.club/blogs/Ed-Elliott/tSQLt-Visual-Studio-Test-Adapter
我正计划编写一个 resharper 插件来让它也运行它们,但我还没有这样做。
埃德
听起来您已经在数据库中添加了 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));
}