gpt4 book ai didi

c# - 在测试项目应用程序配置文件中找不到 connectionString

转载 作者:太空狗 更新时间:2023-10-29 18:13:18 26 4
gpt4 key购买 nike

我有一个带有 Web 项目的解决方案,我决定向该解决方案添加一个单元测试项目。在运行测试时,其中一个测试失败并出现此错误:

Result Message: 
Test method DetailsRoleController threw exception:
System.InvalidOperationException: No connection string named 'EquipmentEntities' could be found in the application config file.

这是我的测试脚本:

  [TestClass]
public class RoleControllerTest
{
RoleController RC = new RoleController();
[TestMethod]
public void IndexRoleController()
{
}
[TestMethod]
public void DetailsRoleController()
{
var result = RC.Delete(1);
Assert.IsNotNull(result);
}
}

和 Controller 方法:

public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Role role = db.Roles.Find(id);
if (role == null)
{
return HttpNotFound();
}
return View(role);
}

为什么这个测试失败了?

这个测试用例不是使用主项目的connectrionstrings/context 运行的吗?

好的,我编辑了我的应用程序配置,现在看起来是这样的:

<configuration>
<appSettings>

</appSettings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<connectionStrings>
<add name="EquipmentEntities" connectionString="metadata=res://*/Models.MagazynModel.csdl|res://*/Models.MagazynModel.ssdl|res://*/Models.MagazynModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=XYZ\sqlexpress;initial catalog=Equipment;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>

但现在我有另一个错误:

Result Message: Unable to create instance of class magazynTest.Controllers.RoleControllerTest. Error: System.TypeInitializationException:
The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception. ---> System.Configuration.ConfigurationErrorsException:
Configuration system failed to initialize ---> System.Configuration.ConfigurationErrorsException: Unrecognized configuration section entityFramework.

最佳答案

默认情况下它不会从您的 Web 应用程序中获取它。

它将在当前运行的项目中寻找它。

您必须将其添加到包含您的连接设置的单元测试项目中的 app.config 文件中。

另一种方法是将它注入(inject)到您的 Controller 中,这样在您的测试中您可以传入一个模拟对象,这将完全避免处理实际的数据库实例。

如果您重新设计了使用存储库模式的方法,但没有看到您的类,如下所示:

public class RoleController : Controller
{
private IRoleRepository roleRepository;

// This constructor would not be needed if you were to use IOC container
public RoleController ()
{
this.roleRepository = new RoleRepository(new RoleContext());
}

public RoleController(IRoleRepository studentRepository)
{
this.roleRepository = roleRepository;
}
....

然后您可以像下面这样模拟存储库:

[TestClass]
public class RoleControllerTest
{
private Mock<IRoleRepository> _roleRepository;

[SetUp]
public void SetUp()
{
_roleRepository = new Mock<IRoleRepository>();

}



[TestMethod]
public void IndexRoleController()
{
}
[TestMethod]
public void DetailsRoleController()
{
RoleController RC = new RoleController(_roleRepository.Object);
var result = RC.Delete(1);
Assert.IsNotNull(result);
}
}

更多信息请看这里:

http://kakimotonline.com/2011/02/13/tdd-in-asp-net-mvc-applications-with-moq-framework/

关于c# - 在测试项目应用程序配置文件中找不到 connectionString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21778022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com