单元测试时,是否必须使用数据库来测试CRUD操作?

mrb*_*lah 6 mbunit unit-testing

单元测试时,在测试CRUD操作时是否必须使用数据库?sql lite可以帮忙吗?你是否必须以某种方式在内存中创建数据库?

我正在使用mbunit.

Rob*_*nik 12

不.集成实际的数据库将是集成测试.不是单元测试.

是的,如果你不能以任何其他方式抽象(模拟)你的DAL/DAO,你可以使用任何内存数据库,如SQLiteMS SQL Compact.

考虑到这一点,我必须指出,单元测试可能一直到DAL,但不是DAL本身.DAL必须在集成测试中使用某种实际DB进行测试.

  • ...你可能会争辩说,针对SQL查询而不是执行查询的单元测试就足够了,但有时它还不够.当您要测试SQL Server 2005特定代码是否针对SQL Server 2005实例正常工作时,不能选择将另一个RDBMS(Sqlite而不是SQL Server)换出. (2认同)

Mar*_*ann 12

与所有复杂的问题一样,答案是:它取决于:)

通常,您应该在接口后面隐藏数据访问层,以便您可以在不使用数据库的情况下测试应用程序的其余部分,但是如果您想测试数据访问实现本身呢?

在某些情况下,有些人认为这是多余的,因为他们大多使用声明性数据访问技术,如ORM.

在其他情况下,数据访问组件本身可能包含您可能要测试的一些逻辑.这可能是一个完全相关的事情,但你需要数据库来做到这一点.

有些人认为这是集成测试而不是单元测试,但在我的书中,你所谓的并不重要 - 最重要的是你从全自动测试中获得价值,你绝对可以使用单元测试框架来驱动这些测试.

前段时间我写了关于如何在SQL Server上执行此操作的内容.要记住的最重要的事情是避免使用某些"代表性数据"创建通用夹具的诱惑,并尝试在所有测试中重复使用它.相反,您应该在每个测试中填写数据并在之后进行清理.