有人能告诉我这是否可能发生在我上面显示的环境中?如果是这样,你能指出我正确的方向吗?
解决方法
在您的测试设置代码中:
>使用sql脚本创建“临时”数据库.使用唯一名称,例如unitTestDatabase_ [timestamp].
>在测试数据库中设置测试所需的数据.理想情况下,使用公共API函数(例如CreateUser,AddNewCustomer),但在不存在所需API的情况下,请使用sql命令.使用API来设置测试数据使得测试对于低级实现(即数据库模式)的更改更加健壮.这是我们编写单元测试的一个原因,以确保对实现的更改不会破坏功能.
>运行单元测试,使用依赖注入将测试数据库连接字符串从测试代码传递到测试中的代码.
并在您的测试拆解代码中,删除数据库.理想情况下应该使用数据库卸载脚本来完成,这些脚本也应该受版本控制.
您可以控制创建单元测试数据库的频率:例如通过在[AssemblyInitialize],[ClassInitialize]或[TestInitialize]方法中创建数据库,每个测试项目,测试类或测试方法或组合.
这是我们使用的一项非常成功的技术.优点是:
>每次我们运行单元测试时,我们都会测试我们的数据库安装脚本是否与代码一起工作.
>测试隔离,即测试只影响他们的测试数据库.如果回滚代码出错并不重要,那么你不会触及任何其他人的数据.
>对代码的信心.也就是说,因为我们使用的是真正的数据库,所以单元测试让我更有信心代码工作比我模拟数据库更有信心.当然,这取决于您的高级集成/组件测试套件有多好.
缺点:
>单元测试依赖于外部系统(DBMS).您需要在测试设置代码中找到DBMS的名称.这可以通过使用配置文件或查看正在运行的本地DBMS的运行时来完成.>数据库安装脚本可能会降低测试速度.根据我们的经验,测试仍然运行得足够快,并且有很多优化的机会.我们在大约1分钟内运行大约400个单元测试的测试套件,其中包括在sqlServer 2008的本地安装上创建5个单独的数据库.