我现在正在几个论坛,博客,MSDN等上搜索几天,但到目前为止我还没有找到关于这个主题的任何指导。我将尝试以更详细的方式解释这篇文章,因为我认为SSDT开发的信息和文档没有很好地记录,并且没有像VS 2010数据库项目那样的最佳实践文档(http://vsdatabaseguide.codeplex.com/)。
我是一名C#开发人员(没有DBA),我们正处于绿色领域项目(10-15名开发人员)的开发阶段的开始阶段,我们目前正在定义我们的开发过程,包括数据库开发的处理。
我们想要使用的技术和工具链:
开发过程基于测试驱动开发,如下所示:
所以有一些观点我不能100%确定如何解决它们(特别是单元测试的数据库处理),如果你能把我放在正确的方向,我将不胜感激:
如何解决自动化单元测试的数据库创建问题:
a)为每个执行的测试方法执行SQL数据库生成脚本(可以通过SSDT发布功能手动创建)?这是我更喜欢的选项,因为每个测试都有一个干净且一致的数据库状态。是否存在为每个测试创建localdb数据库的性能问题?
b)或者使用msbuild任务“SQLPublish”或“sqlPackage.exe”?我认为这不是一个选择,因为这将是一次性的事情,我想为每个单元测试创建一个新的测试数据库。
c)或者手动创建测试数据库并将* .mdf文件保存到源控制文件夹的根目录并为每个测试创建一个副本?但是我不喜欢这样,因为开发人员A可以覆盖该文件,该文件可能会从之前签入其更改的其他开发人员B进行更改。这意味着开发人员
如何解决自动化单元测试的测试数据创建问题:
a)执行特定于测试的SQL脚本,为每个测试插入适当的测试数据。我认为这也意味着要创建一个新的数据库,如第1点所述。再次,这是我的首选。
b)或者使用EF创建测试数据似乎不是一种干净的方式,因为这取决于EF模型实现,实际应该通过功能单元测试隐式测试。
c)或使用手动创建的测试数据库文件。但这会使开发过程中的开发过程更加复杂。其他开发人员也可以覆盖这一点。
也许很高兴提到我们对单元测试的期望。我们的单元测试的目标不是像存储过程那样测试数据库模式等等。我们希望使用“代码”单元测试来测试部分应用程序功能,这些单元测试也可以看作是集成测试。
所有人都有类似的开发过程,您的经历是什么? 有什么建议可以改善我们的开发过程 有关于SSDT开发的资源或最佳实践文档吗? 对我来说最重要的问题是,您是如何解决自动化单元测试的,包括正确的数据库处理和集成测试?
答案 0 :(得分:-1)
当您需要数据库时,它不是单元测试。对于与实体框架结合的单元测试,您应该使用伪造的dbcontext。