【问题标题】:C# unit tests for verifying existing data in SQL server [closed]用于验证 SQL Server 中现有数据的 C# 单元测试 [关闭]
【发布时间】:2017-01-09 20:51:49
【问题描述】:

我正在使用 Visual Studio 单元测试框架编写单元测试来验证数据库中现有的基础数据。数据对我们的团队非常重要,我们希望始终确保数据不会更改。

有关如何编写这些类型的测试的任何指导?

【问题讨论】:

  • 在这种情况下,它不是单元测试。单元测试仅针对特定的隔离代码,以确保其按预期工作。这更有可能是一个集成测试。
  • 如果数据不能改变,为什么在数据库中而不是硬编码?另外,您不能使用数据库约束来强制现有数据而不是软件测试吗?

标签: c# unit-testing visual-studio-2015


【解决方案1】:

但是,您的问题相当广泛。没有什么可以阻止您编写一个从数据库中检索数据的测试,您想要检查(ADO.NET 可能是一种快速的方法)。您可以使用某种对象比较库来检查记录或执行以下简单操作:

Assert.IsTrue(result.Any(x => x.Name == "John"));

确保在测试中处理掉所有数据库连接。

【讨论】:

    【解决方案2】:

    根据基本数据量,您可以考虑以下之一:

    体积小

    每个测试都可能从一个表中获取所有数据并检查您是否找到了您所期望的


    体积较大

    您可以构建一个参考数据库,其中包含应始终在数据库中的所有表和数据。您可以执行查询来检查参考信息是否存在:

    -- checks that used table is not missing any reference table information
    -- if count > 1 then something is missing
    SELECT COUNT(1)
    FROM RefDb.TheTable RT
    WHERE NOT EXISTS (SELECT 1 FROM ActualDb.TheTable AT
       WHERE AT.PkId = RT.PkId  
       -- join can be extended for all interesting column values
    ) 
    

    对于大量数据,此解决方案比第一个解决方案要快得多,因为信息不会被提取到应用层。它还允许在参考数据和使用数据之间进行隔离,从而提高安全性。

    另一种选择是将信息存储在单独的架构中,但这意味着参考信息将与所有环境(测试、预生产等)的实际数据一起复制

    【讨论】:

      【解决方案3】:

      只是测试它。使用单元测试并编写访问数据库的代码并验证(断言)结果。通常在单元测试中访问数据库并不常见。因为通常您不会测试您测试软件运行和行为方式的行为的数据。因为单元测试应该快速运行,所以您通常会避免访问数据库并存根或模拟出预期的数据。 如果你想测试预期的数据是否真的进入数据库——你会做集成测试。但就像之前提到的,这更多是为了测试代码和应用程​​序的行为。

      在你的情况下,你应该在你的应用程序中实现一些逻辑,在启动之前验证你的数据在数据库中的存在。只需编写你会写的代码。与您的业务逻辑相同 - 因为它非常重要,它应该成为业务逻辑的一部分。请记住,单元测试只是代码。

      不知道我是否正确理解了您的问题,但我希望这会有所帮助。否则,请编辑您的问题 =)

      【讨论】:

        猜你喜欢
        • 2016-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 2014-03-20
        • 2012-12-04
        • 2011-01-03
        相关资源
        最近更新 更多