2013-09-16 49 views
2

有没有什么方法可以像使用NUnit一样在Visual Studio中公开tSQLt测试?将tSQLt暴露为NUnit测试

甚好,于是在一个解决方案中所有的测试可以使用ReSharper的

运行......我知道红盖茨的SQL测试产品,但它似乎只针对SSMS

回答

5

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

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

希望这会有所帮助。

+0

酷,我给它一个去... – SteveC

+0

喜史蒂夫,它是关于时间,我制定了如何使用Git工作,所以我创建了一个GitHub的帐户,并添加昨天我的第一个项目。检查一下,它可以为你节省一些努力。 https://github.com/chilli-andrew/tsqlt-demo-workflow – Andrew

0

这听起来像你已经添加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)); 
    }