C# 我可以 运行 一个仅在单元测试通过时才执行的方法吗

C# can I run a method that only executes if Unit Tests Pass

我已经构建了一个集成测试作为 Visual Studio 2017 测试项目。此项目将 运行 作为 VSTS 构建步骤。

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

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

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

计划任何失败的数据库都将保留在服务器中,以便可以对所有错误进行剖析,但我们不需要保留测试成功的数据库。

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

当我的集成测试 100% 通过时,如何触发脚本从 Postgres 服务器删除数据库?

我只知道该怎么做。在 运行 脚本的测试步骤之后,我是否 运行 额外的 VSTS 构建步骤?或者我是否有我的测试方法 return 一个布尔值,并在项目结束时以一种 运行 脚本的方法收集布尔值?

从 QA 和集成测试的角度来看,在 NUnit(和其他)中,在每次测试之前和之后都会执行设置和拆卸步骤。您可以在 Teardown 步骤中添加一些内容以确认测试已通过,如果是这样,则调用脚本来删除 table.

    [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.");
        }
    }

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

这可能会解决您的问题:NUnit - Is it possible to check in the TearDown whether the test succeeded?

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