gpt4 book ai didi

c# - 通过 C# 测试测试你的数据库

转载 作者:太空狗 更新时间:2023-10-30 01:27:50 25 4
gpt4 key购买 nike

我被分配了测试我们数据库的任务。这是一个测试数据库,我们可以对它做任何我们想做的事,并轻松地回滚它。我被赋予了这项任务,因为我们仍处于设计阶段(这意味着项目的任何时间点的任何更改都可能发生......将 Person.FirstName 列重命名为 [First_Name],然后将其重命名为 [ First Name]。我的目标是粗略估计我们在进行更改时会遇到什么样的痛苦,以便我们可以提前计划。我们也可以在生产过程中预期这些变化。

我列表中的项目是并且已经进行了测试:

  • 输入 null 这个词(不是字面上的 null,而是“null”),因为使用动态 SQL 它可能会认为您真的是 null。我们发现这是因为姓“null”的人引发了异常。

  • 使用单引号是因为动态 SQL 不可能使用单引号。同样,名字中有 1 的人造成了崩溃。

以前从未做过,这就是我所知道的可能会崩溃的所有内容。还有其他想法吗?我们正在尝试模拟用户可能输入的数据。

编辑 1:我们的问题是我们有一个搜索屏幕,其中包含大约 25 个他们可以搜索的字段。这些搜索字段中有些很简单(例如名字),有些则不太简单(日期小于 2 的类别 1,但也有日期大于 2 的类别 2,或者在任何时间段都有类别 4)。搜索屏幕允许用户为这 25 个字段中的每一个选择不同的运算符和谓词。有没有比动态 SQL 更好的方法来处理这个问题?我处于一个位置和一个时间点,如果它更好,我们可以更改为不同的东西。

编辑 2:我不知道是否值得一提,但我们使用 LINQ 访问存储过程。我的研究表明,动态 LINQ 不会像动态 SQL 查询那样执行我们需要它执行的操作。虽然可能是错误的。

最佳答案

“'; Drop Table Person; --”也会导致崩溃吗?

您真的应该考虑将您的策略​​从动态 SQL 转移到参数化查询以避免 SQL 注入(inject)技术。

至于数据库的 C# 测试,您可以使用事务化查询和 nUnit 进行单元测试——这是一种时尚。严格来说,单元测试应该将您的应用程序与数据存储区分开,以便可以测试组件部分而不会因访问和修改数据存储区而造成性能损失。但是,如果您决定这样做,您可以使用非常相似的技术来测试您的数据存储。在 TestFixtureSetup 中创建事务并在 TestFixtureTearDown 中将其回滚,这样您的数据库将在测试完成时恢复到原始状态。

您当然应该意识到,以这种方式测试数据存储时会出现性能损失。您的单元测试不会像您的应用程序的其余部分那样执行 - 假设您的应用程序的其余部分已进行性能调整。

关于c# - 通过 C# 测试测试你的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2185288/

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