今年夏天,我开发了一个基本的ASP.NET/SQL Server CRUD应用程序,单元测试是其中一个要求。当我试图对数据库进行测试时遇到了一些麻烦。据我了解,单元测试应该是:单元测试数据库
- 无国籍
- 相互独立
- 重复相同的结果,即没有更改保存
这些要求似乎是在每个赔率其他当为数据库开发时。例如,我不能测试Insert()而不确定要插入的行不存在,因此我需要先调用Delete()。但是,如果他们不在那里呢?然后我需要先调用Exists()函数。
我最终的解决方案涉及非常大的设置函数(yuck!)和一个空的测试用例,它将首先运行,并表明安装程序没有问题。这是牺牲了测试的独立性,同时保持了他们的无状态。
我发现的另一个解决方案是将函数调用包装在易于回滚的事务中,如Roy Osherove's XtUnit。这项工作,但它涉及另一个图书馆,另一个依赖,并且对于手头问题的解决方案似乎有点过分。
那么,面对这种情况,SO社区做了什么?
tgmdbm说:
通常可以使用自己喜欢的 自动化单元测试框架 进行集成测试,这是 为什么有些人感到困惑,但他们 不遵循相同的规则。你是 允许涉及你的许多类 (因为他们已经过单元测试)的具体实施 。 您正在测试您的具体 类如何相互交互,以及 与数据库。
所以,如果我读这正确的,实在是没有办法有效单元测试数据访问层。或者,数据访问层的“单元测试”是否涉及测试,比如由类生成的SQL /命令,而与数据库的实际交互无关?