gpt4 book ai didi

c# - 对sql字符串进行单元测试

转载 作者:行者123 更新时间:2023-11-28 20:41:05 28 4
gpt4 key购买 nike

小问题

有没有什么东西可以运行具有 JOINS 和 WHERE 而不是数据库的 sql 命令

长问题

我正在为一个 brown field win forms 应用程序进行单元测试。我可以完全自由地选择我有什么样的单元测试框架

我遇到的问题是代码中有大量 SQL 字符串语句。想想这样的事

SELECT *
FROM Sale
INNER JOIN SaleItem ON Sale.ID = SaleItem.SaleID
WHERE ID = 5

它是参数化的,并且有 IF 语句来构建 where,因此它可能是 CustomerId = 5 或 DispatchDate 在去年的位置。查询比这个大得多,我有点想检查所有连接是否有效以及所有可能的位置是否有效。别以为这可能是我太注重细节了

我不想管理数据数据库,如果数据发生变化,它会破坏测试,我担心这会根深蒂固,人们会扼杀测试。

我想针对某个不是数据库的对象或事物运行此 sql 并获取一个项目。它必须足够聪明才能实际过滤所以如果 Sale 对象如下表所示,它只会返回 ID 为 5 的对象。

ID DateDispatched CustomerID
1 1/1/1 5
2 2/2/2 6
5 3/3/3 7

我曾考虑过在数据集和 XML 上运行 sql 命令,但我认为这行不通。我想 LINQ 在过去的几年里把我宠坏了,因为我不知道该怎么做。恐怕有太多的逻辑构建了大量的 SQL 语句,我必须对它们进行一些测试。

如果您能推荐一个好的单元测试框架,将非常愿意听到其他选项,例如将 SQL 移动到数据库中的存储过程。

现在我不喜欢在应用程序中构建 SQL,并希望将其更改为 Entity Framework ,但它是一个已有 10 年历史的应用程序,这不是一个选择。

好的,一些快速编辑数据库在 SQL Server 2012 上,因此存储过程是一个选项,因为在某些地方他们使用存储过程。

最佳答案

让我尝试了解您的问题。

You have got an winform application and you are writing unit tests for this. But if you run the the test, you afraid it will going to hit the DB and spoil the data. So you want some mechanism which allows to run your unit tests but will not hit the actual database. Correct?

如果我答对了你的问题,我建议分离出你的数据库交互逻辑并使其成为接口(interface)驱动的。然后您可以创建模拟对象,您可以在其中定义对数据库交互接口(interface)的期望。因此,例如,如果调用了某个 GetSales() 方法,该方法应该返回什么?等等。共享有关单元测试和模拟的详细信息的一些链接。

https://msdn.microsoft.com/en-us/library/ff650441.aspx

https://github.com/Moq/moq4

http://www.developerhandbook.com/unit-testing/writing-unit-tests-with-nunit-and-moq/

Testing a MVC Controller fails with NULL reference exception

关于c# - 对sql字符串进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32637778/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com