【问题标题】:Execute some code after a successful SQL Unit TestSQL 单元测试成功后执行一些代码
【发布时间】:2022-07-06 01:46:52
【问题描述】:

我们有一个应用程序,其中包含由多个开发人员开发和维护的许多 SPROC,我们正在尝试自动化该过程以跟踪修改和测试 SPROC。我们目前在我们的数据库中有一个表,该表是基于在创建、修改或删除 SPROC 时触发的触发器来填充和修改的。在此表中,有一列指定 SPROC 是否经过测试并被单元测试视为成功。我们使用 Visual Studio 的测试资源管理器和单元测试设计器来处理 SQL 单元测试。我们让它们运行良好,但正在尝试添加自动化以在测试成功后更新数据库。每个成功的单元测试是否都会触及某种事件或类似的东西?如果不是,那么至少可以捕获结果并在(n)(un)成功执行后允许某种附加逻辑?

在 TestMethod 本身中,返回的对象之一是 SqlExecutionResult[] testResults 对象。在这个对象中是 hasError 属性,当成功时设置为 true。似乎 testResults 没有填充某些错误,并且永远为空。所有单元测试完成后是否有一些方法或类似的方法可以回顾/使用 testResults 来确认成功?可以使用并捕获所有单元测试的输出的东西?

【问题讨论】:

    标签: c# sql visual-studio unit-testing stored-procedures


    【解决方案1】:

    这适用于所有执行的测试,而不是专门通过测试。您可以根据需要创建一个存储过程来重置和更新该测试表/数据库,然后使用[SetUp] 方法确保它在每次测试执行之前触发

    作为一个基本的例子,我已经使用了 nUnit

            private IMyRepo _repo;
    
            [SetUp]
            public void Init()
            {
                _repo = new MyRepoImpl();
    
                //reset db to a known state for each test
                using (SqlConnection c = new SqlConnection(Settings.GetConnString()))
                {
                    SqlCommand cmd = new SqlCommand
                    {
                        Connection = c,
                        CommandText = "DbReset",
                        CommandType = CommandType.StoredProcedure
                    };
    
                    c.Open();
                    cmd.ExecuteNonQuery();
                }
            }
    

    您可以设置此处使用的DbReset 存储过程来更新该特定列

    但这里的一个主要警告是,这将在 每个 测试之前触发,而不仅仅是成功或失败的测试,而且我不确定是否有这样的专门化来触发某事通过测试。

    在 nUnit 中,假设 [SetUp] 方法没有引发异常,则保证会触发 [TearDown] 方法,因此您将在这里遇到相同的问题。如果在测试失败时[TearDown]'s 不会触发的场景,那可能是解决您的问题的一种 hacky 方法,但这些类型的方法通常针对对象创建和清理,所以我高度怀疑是否有另一个测试套件会尝试这样做(因为即使在失败的测试中,开发人员仍然希望进行清理)

    抱歉,我无法针对您的确切情况提供解决方案,但我希望这能让您更接近您的答案

    【讨论】:

    • 这不是我想要的。我为我的帖子添加了一些细节来澄清。我最关心的是在成功测试后执行某种逻辑。特别是之后。
    猜你喜欢
    • 2013-12-05
    • 2011-02-21
    • 2017-02-22
    • 2013-04-16
    • 2013-08-21
    • 2018-03-12
    • 2020-12-15
    • 2013-09-02
    • 1970-01-01
    相关资源
    最近更新 更多