0

我有一个包含Core项目顶部的Services项目的MVC项目的解决方案。MVC中的单元测试无法创建/访问数据库

我刚刚添加了一个单元测试项目和引用的核心和服务 - 我试图测试服务。

我在测试中的基本呼叫:

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,然后运行试过,但我得到这样的:

消息=数据库“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'附加。 。 来源= .net SqlClient数据提供 错误码= -2146232060 类= 16 LineNumber上= 65536 数= 1801 程序= “” 服务器= \ 状态= 2 堆栈跟踪:

我试着删除数据库,让测试做它的事情,我得到这个:

发生文件激活错误。物理文件名 '\ Project.Services.Tests.mdf'可能不正确。诊断并更正 其他错误,然后重试该操作。

我该如何正确工作?

+1

IMO单元测试手段在没有数据库交互的情况下,您可以使用假或模拟进行单元测试。如果你使用数据库进行单元测试,那么你的测试将会像乌龟一样慢:D – 2013-02-21 04:33:18

+0

我明白了 - 我一次只想学习一件事。 – RobVious 2013-02-21 15:11:16

回答

1

在单元测试中,您必须测试没有任何依赖性的代码,例如数据库或文件系统等。 单元测试意味着独立测试代码的那部分代码。 如果你想通过集成到数据库来测试你的代码,你必须创建集成测试。 这意味着您应该在运行测试之前创建数据库使用的初始化,并在完成测试之后拆除资源。

也许这个链接可以帮助您更了解difference between Unit Test and Integration Test

+0

我只是试图在这里一次学习一件事...单元测试数据库似乎更简单 - 一旦我明白了,我会嘲笑。 – RobVious 2013-02-21 15:10:34

+0

简单性在测试中无关紧要!您必须为每个porpuse进行正确的测试。但正如我所说的,您可以为数据库的runnig测试创建初始化和拆卸方法。 – amirhosseinab 2013-02-21 19:32:46

+0

我看到这个答案很多,我觉得它很刺激 - 不是因为它的错误 - 而是因为DAL是应用程序中的一个层,应该与实际的数据库实现分离(因此可以单元测试)。我看到的一个建议是使用内存数据库(例如LocalDB或MDF)嘲笑生产模式,但占用的空间相对较小 - http://blogs.interknowlogy.com/2014/08/29/unit-testing-使用-的LocalDB / – 2014-10-23 22:24:10

0

你应该只是修复连接字符串,它应该工作,你是从附加数据库文件| DataDirectory目录|的测试项目,