测试驱动开发 – 我应该测试数据库列和索引吗?

我是TDD的新手。 我发现shoulda gem能够测试数据库实体是否存在列以及测试其索引的能力。

但是有必要在我的测试套件中包含列和索引的测试吗?

我是否需要关注在开发过程中可能删除任何列和索引?

不要测试数据库列 ; 那只是测试实现。 不要测试实现,测试行为。 测试使用存储在这些列中的属性的function。 例外:如果您的架构有外部要求(这从未发生在我身上,但我可以想象它),编写测试以显示满足这些要求可能会有所帮助。

测试指标? 这取决于。 如果您是严格测试驱动的,那么您可能希望为纯粹出于性能原因而添加的每个索引编写测试。 我很受测试驱动,但我不会写这样的测试; 我只是创建索引。 对指数的真正考验是它们对绩效的影响。 在任何情况下,都没有必要测试是否存在必须存在的索引以支持您已经在测试的function(主键,外键,唯一约束等)。

我很少测试列和索引。 如果要确保数据库迁移或约束正确,可以包含它。 生产将是发展的合理副本。 因此,如果您真的关心所有潜在风险,您可以编写测试用例。