0

我有一个 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”。Source=.Net SqlClient 数据提供程序 ErrorCode=-2146232060 Class=16 LineNumber=65536 Number=1801 Procedure="" Server=.\ State=2 StackTrace:

我尝试删除数据库并让测试完成它,我得到了这个:

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

我怎样才能让它正常工作?

4

2 回答 2

2

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

也许这个链接可以帮助您更多地了解单元测试和集成测试之间的区别

于 2013-02-21T06:05:37.880 回答
0

您应该只修复连接字符串,它应该可以工作,您正在从 |DataDirectory| 附加数据库文件 的测试项目,

于 2017-04-28T23:59:31.580 回答