Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于验证SQL server中现有数据的C#单元测试_C#_Unit Testing_Visual Studio 2015 - Fatal编程技术网

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

用于验证SQL server中现有数据的C#单元测试,c#,unit-testing,visual-studio-2015,C#,Unit Testing,Visual Studio 2015,我正在使用VisualStudio单元测试框架编写单元测试,以验证数据库中现有的基础数据。数据对我们的团队非常重要,我们希望确保数据始终不会更改 有关于如何编写这些类型测试的指导吗 然而,你的问题相当广泛。没有什么可以阻止您编写一个从数据库检索数据的测试,您需要检查它(ADO.NET可能是一种快速的方法)。您可以使用某种对象比较库来检查记录,或执行以下简单操作: Assert.IsTrue(result.Any(x => x.Name == "John")); 确保在测试中丢弃任何db连

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


有关于如何编写这些类型测试的指导吗

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

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

确保在测试中丢弃任何db连接。

只需测试即可。使用单元测试并编写访问数据库和验证(断言)结果的代码。通常在单元测试中命中数据库并不常见。因为通常不测试数据,所以测试软件的运行和行为。因为单元测试应该运行得很快,所以您通常避免命中数据库和存根或模拟预期的数据。 如果您想测试预期数据是否实际到达数据库中,您可以进行集成测试。但就像前面提到的,这更多的是测试代码和应用程序的行为

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


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

< P>根据基础数据卷,您可以考虑以下之一:

小容量

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


相对较大的交易量

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

-- 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
) 
对于较大的数据量,此解决方案比第一个解决方案快得多,因为信息不会被提取到应用程序层。它还允许在引用和使用的数据之间进行隔离,从而提高安全性


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

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