【问题标题】:Deleting test rows with an auto increment key in a unit test在单元测试中使用自动增量键删除测试行
【发布时间】:2010-11-12 04:43:41
【问题描述】:

有什么方法可以删除单元测试中测试用例插入的行?

通常,如果键是自动递增的,我必须存储插入测试用例的行的 ID,以便在拆卸阶段删除它们。

但是,有时测试用例会崩溃或抛出意外错误,而不会发生茶歇阶段(在我的情况下,这是 PHP 的致命异常错误)。在这种情况下,我在删除那些新创建的行时遇到问题。

我考虑过分配一大块 ID 用于测试,比如 1 到 100;但由于插入行的代码使用自动递增键,我不能强制代码使用为测试保留的 ID。

有什么方法可以将一行“标记”为“正在测试”,以便在测试用例之外轻松清理它们以防崩溃?

我正在使用 PHP、SimpleTest 和 MySQL

【问题讨论】:

  • 如果您知道要插入的测试数据的值(并且它与您不想删除的数据不同),您可以这样做 delete from <tblname> where <column>=<test_value>;

标签: php mysql unit-testing


【解决方案1】:

通常的做法是使用特殊的空白数据库仅用于测试。然后在setUp() 中用测试数据填充表格,在tearDown() 中清理所有内容。

更准确地说:声明一些cleanDatabase() 方法并在两个地方调用它,在设置和拆卸中。

【讨论】:

  • 我的问题确实表明我确实遵循标准做法。当测试用例崩溃并且 tearDown() 没有运行时,我无法存储新插入行的 ID。如果我确实使用了测试数据库,这意味着我无法在实时应用程序上运行单元测试以进行验证和故障排除。
  • @Extrakun:标准做法是单元测试使用空白测试数据库。
  • 感谢您纠正我的误解。我做了一些阅读以验证您所说的话,看来您是对的。但是,在您编辑之前,我无法对您的答案进行投票。我会照原样接受。
  • @Extrakun:我很高兴我的回答有帮助 ;-)
猜你喜欢
  • 2013-08-29
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 2015-06-25
  • 2010-09-10
相关资源
最近更新 更多