我可以运行一个方法,只有在单元测试通过

时间:2018-01-19 18:19:54

标签: c# unit-testing integration-testing

我已将Integration Test构建为Visual Studio 2017测试项目。该项目将作为VSTS构建步骤运行。

具体来说,我正在测试数据库(PostgreSQL)配置应用程序的正确功能。

这意味着此单元测试将使用Provisioning API在数据库服务器中创建数据库和数据库用户,并且测试还将验证数据库的架构,表和列的正确结构。

这导致数据库服务器包含仅从正在运行的集成测试构建的几个数据库。

计划将任何失败的数据库保留在服务器中,以便可以针对所有错误解析它们,但我们无需保留成功测试的数据库。

我目前的问题是,由于测试是在单元测试项目中,测试方法会运行它们的断言,并且已经完成。

当我的Integration Test以100%的速度通过时,如何触发脚本从Postgres服务器中删除数据库?

我只知道该怎么做。在测试步骤运行脚本后,是否运行其他VSTS构建步骤?或者我的测试方法是否返回bool,并在运行脚本的方法中收集项目末尾的bool?

3 个答案:

答案 0 :(得分:3)

从QA和集成测试的角度来看,在NUnit(和其他)中,每个测试之前和之后都会执行Setup和Teardown步骤。您可以在Teardown步骤中放置一些内容以确认测试已通过,如果是,则调用脚本删除该表。

    [TearDown]
    public void CleanUp()
    {
        if (TestContext.CurrentContext.Result.Outcome.ToString().Equals("Passed")
        {
            // Run Script to Drop Table
            // Confirm Table Dropped
            // Close Driver
            driver.Close();
            Console.WriteLine("Table Drop Confirmed and Driver Closed.");
        } else {
            Console.WriteLine("Test did not pass, Table not dropped.");
            driver.Close();
            Console.WriteLine("Driver Closed.");
        }
    }

答案 1 :(得分:1)

这可能会解决您的问题:supported options

NUnit提供了一种访问它的测试运行结果的方法,因此您可以检查成功/失败,然后执行清理或跳过它。

答案 2 :(得分:0)

在我使用的测试框架中,断言通过在失败时抛出异常来工作。测试的执行在那时结束。 如果在测试结束时删除表,则在断言之后,如果测试失败(因为执行将在失败的断言处停止),它将不会运行,但如果测试通过则会运行。