将tSQLt公开为NUnit测试

时间:2013-09-16 17:12:03

标签: visual-studio testing nunit tsqlt

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

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

运行

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

3 个答案:

答案 0 :(得分:5)

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

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

希望这有帮助。

答案 1 :(得分:1)

听起来你已经在数据库中添加了tSQLt和测试,并且你想运行它们。如果是这样,很容易将它们公开为NUnit测试Resharper可以运行的那些。

在这个例子中,我使用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));
    }

答案 2 :(得分:1)

我编写了一个visual studio test,用于搜索.sql文件中的tSQLt测试,可以使用test explorer窗口运行:

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

我打算写一个resharper插件让它运行它们但我还没有完成它。