Asp.net mvc MVC中的单元测试不创建/访问数据库
我有一个MVC项目的解决方案,其中包含一个核心项目之上的服务项目 我刚刚添加了一个单元测试项目,并引用了核心和服务——我正在尝试测试服务 我在测试中有一个基本调用:Asp.net mvc MVC中的单元测试不创建/访问数据库,asp.net-mvc,asp.net-mvc-3,unit-testing,asp.net-mvc-4,mstest,Asp.net Mvc,Asp.net Mvc 3,Unit Testing,Asp.net Mvc 4,Mstest,我有一个MVC项目的解决方案,其中包含一个核心项目之上的服务项目 我刚刚添加了一个单元测试项目,并引用了核心和服务——我正在尝试测试服务 我在测试中有一个基本调用: public class CrudTests { private readonly SetServices _setService = new SetServices(); [TestMethod] public void TestMethod() {
public class CrudTests
{
private readonly SetServices _setService = new SetServices();
[TestMethod]
public void TestMethod()
{
_setService.CreateSet("Test Set", "Test Set Details", null);
由于测试无法连接到数据库,因此最终失败。我的配置有以下内容:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.\;Initial Catalog=Project.Services.Tests;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\Project.Services.Tests.mdf" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
我尝试创建数据库Project.Services.Tests,然后运行,但我发现:
Message=数据库'C:\Program Files\Microsoft SQL
Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\App.Services.Tests.mdf'
已经存在。请选择其他数据库名称。无法附加
文件
'C:\PROJECTS\App\App\Services.Tests\bin\Debug\Services.Tests.mdf'
作为数据库“App.Services.Tests”。
Source=.Net SqlClient数据提供程序
错误代码=-2146232060
等级=16
行号=65536
数字=1801
Procedure=“”
服务器=\
状态=2
堆栈跟踪:
我试着删除数据库,让测试来做这件事,结果是:
发生文件激活错误。物理文件名
“\Project.Services.Tests.mdf”可能不正确。诊断和纠正
其他错误,然后重试该操作
如何才能使其正常工作?在单元测试中,您必须在没有任何依赖关系(如数据库或文件系统等)的情况下测试代码。 单元测试意味着只独立测试代码的这一部分。 若要通过将代码集成到数据库来测试代码,则必须创建集成测试。 这意味着您应该在运行测试之前为数据库使用创建一个初始化,并在完成测试之后为diposing资源创建一个分解
也许这个链接可以帮助您更好地理解您应该只修复连接字符串,它应该可以工作,您正在从测试项目的| DataDirectory |附加数据库文件,IMO单元测试意味着没有DB交互,您可以使用Fake或Mock进行单元测试。如果你用DB进行单元测试,那么你的will测试会像乌龟一样慢:我明白了-我只是想一次学一件事。我只是想一次学一件事。。。使用数据库进行单元测试似乎更简单——一旦我做到了这一点,我将引入模拟。简单性在测试中并不重要!您必须为每个porpus执行正确类型的测试。但正如我所说,您可以创建initialize和detall-down方法来运行针对数据库的测试。我经常看到这个答案,我觉得它令人恼火——不是因为它错了——而是因为DAL是应用程序中的一个层,应该与实际的数据库实现分离(因此可以进行单元测试)。我看到的一个建议是使用内存中的数据库(例如LocalDB或MDF)模拟生产模式,但占用空间相对较低-