c# - 带有数据库和 ADO.NET Entity Framework 的 .NET TDD - 集成测试

标签 c# .net ado.net tdd linq-to-entities

我正在使用 ADO.NET Entity Framework ,并且正在使用连接到本地数据库服务器的 AdventureWorks 数据库。对于单元测试,人们采用了哪些方法来处理数据库?

显然,数据库必须处于预定义的更改状态,以便测试可以彼此隔离......所以我需要能够运行插入和更新,然后在两者之间回滚测试或一批测试完成后。

有什么建议吗?

谢谢。

最佳答案

我遇到过类似的情况。

将数据存储到数据库并将它们保留到以前的状态并不是理想的单元测试。它们是集成测试用例。

为了执行集成测试(插入/更新操作)而不影响实际数据,我建议如下

<强>1。使用不同的数据库(更改实际数据库的名称),并让架构保持与实际数据库相同。

<强>2。将单元测试指向新创建的数据库。

<强>3。现在我们如何创建一个新的数据库,以自动方式单独运行测试?

答案:将 SQL 脚本列在批处理文件中,例如这个。(这里我假设您使用的是 SQL SERVER)

例如,sqlcmd -i c:\data\runscripts\InventoryMonthEnd.sql

指定批处理文件,存放要在 MSBuild 进程中执行的 sql 语句。

示例 MSBuild 任务。

<ItemGroup>
<StoredProcScripts Include="$(RelativeSPDir)/*.sql" />
</ItemGroup>

<Target>
<Exec Command="isql -E -n -b -d DBName -i %(StoredProcScripts.Identity)" Condition="'%(StoredProcScripts.Identity)' != ''"/>
</Target>

关于c# - 带有数据库和 ADO.NET Entity Framework 的 .NET TDD - 集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3033375/

相关文章:

c# - 声明静态、非静态、私有(private)或公共(public)数据库上下文有什么含义?

c# - Entity Framework 、TPT 继承和多语言支持

c# - 实体代码优先用户、角色、用户角色表

c# - c# 如何更改富文本框中选中文本的字体

c# - 如何实现停止/取消按钮?

c# - 如何报告 PLINQ 查询的进度?

c# - 用数据库中的数据填充组合框

c# - 在 C# 中,赋值和参数传递可以发生在一条语句中吗?

java - 在 .NET 和 Java 中将 Word 文档的第一页呈现为图像

c# - 月底计算