我有一个MVC项目的解决方案,其中包含一个Core项目之上的Services项目。
我刚刚添加了一个单元测试项目并引用了核心和服务 - 我正在尝试测试服务。
我在测试中有一个基本的电话:
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 = Database'C:\ Program Files \ Microsoft SQL 服务器\ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ App.Services.Tests.mdf” 已经存在。选择其他数据库名称。无法附上 文件 'C:\ PROJECTS \软件\软件\ Services.Tests \ BIN \调试\ Services.Tests.mdf' 作为数据库'App.Services.Tests'。 Source = .Net SqlClient数据提供程序 错误码= -2146232060 类= 16 LineNumber上= 65536 数= 1801 过程=“” 服务器=。\ 状态= 2 堆栈跟踪:
我尝试删除数据库并让测试做到了,我得到了这个:
发生了文件激活错误。物理文件名 '\ Project.Services.Tests.mdf'可能不正确。诊断并纠正 其他错误,然后重试操作。
我怎样才能使其正常工作?
答案 0 :(得分:2)
在单元测试中,您必须在没有任何依赖性的情况下测试代码,例如数据库或文件系统等。 单元测试意味着独立地仅测试该部分代码。 如果要通过集成到数据库来测试代码,则必须创建集成测试。 这意味着您应该在运行测试之前创建数据库使用初始化,并在完成测试后拆除资源。
也许这个链接可以帮助您更多地了解difference between Unit Test and Integration Test
答案 1 :(得分:0)
您应该只修复连接字符串,它应该可以工作,您正在从| DataDirectory |附加数据库文件测试项目,