3

有没有办法在 Visual Studio 中以类似于 NUnit 的方式公开 tSQLt 测试?

更好的是,解决方案中的所有测试都可以使用 Resharper 运行

...我知道 Red Gates SQL Test 产品,但它似乎只针对 SSMS

4

3 回答 3

5

是的,这实际上非常简单,但确实需要编写一些管道代码。TestClasses、Tests 和 TestResults 都在 tSQLt 中可用。我们简单地编写了一个 t4 模板来包装我们的 tSQLt 测试,并使用该模板来生成 nunit 测试。我们的 tSQLt 工作流都在我们的 Visual Studio 项目中,我们使用 FluentMigrator 进行数据库迁移。

如果您有兴趣,我已经在 github ( tsqlt-demo-workflow ) 上发布了一个 tSQLt 演示工作流解决方案。此工作流程类似于我们一直在使用的工作流程。

希望这可以帮助。

于 2013-10-01T09:18:14.053 回答
1

我编写了一个 Visual Studio 测试,它在 .sql 文件中搜索 tSQLt 测试,并且可以使用测试资源管理器窗口运行:

https://the.agilesql.club/blogs/Ed-Elliott/tSQLt-Visual-Studio-Test-Adapter

我正计划编写一个 resharper 插件来让它也运行它们,但我还没有这样做。

埃德

于 2016-08-17T20:24:06.113 回答
1

听起来您已经在数据库中添加了 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));
    }
于 2016-05-27T18:33:12.070 回答