C#单元测试用于验证SQL Server中的现有数据

时间:2017-01-09 20:51:50

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

确保在测试中丢弃任何数据库连接。

答案 1 :(得分:1)

试试吧。使用单元测试并编写访问数据库的代码并验证(断言)结果。通常命中数据库在单元测试中并不常见。因为通常你不测试数据,你测试软件运行和行为的行为。因为单元测试应该快速运行,所以通常可以避免命中数据库和存根或模拟预期的数据。 如果要测试预期数据是否实际存在于数据库中 - 您将进行集成测试。但就像之前提到的那样,更多的是测试代码和应用程​​序的行为。

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

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

答案 2 :(得分:1)

根据基本数据量,您可以考虑以下其中一项:

小音量

每个测试都可以从表中获取所有数据并检查您是否找到了预期的结果


相对较大的数量

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

-- 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
) 

此解决方案比第一个解决方案快得多,因为信息未被提取到应用程序层。它还允许在引用数据和使用数据之间进行隔离,从而提高安全性。

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