Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC中的单元测试不创建/访问数据库_Asp.net Mvc_Asp.net Mvc 3_Unit Testing_Asp.net Mvc 4_Mstest - Fatal编程技术网

Asp.net 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() {

我有一个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,然后运行,但我发现:

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)模拟生产模式,但占用空间相对较低-