【发布时间】:2016-10-12 23:10:40
【问题描述】:
单元测试和 .NET Core (1.0.1) 的新手,寻求帮助。
我希望对一些使用 .NET Core 依赖注入模式的类进行单元测试。应用程序运行良好,但在尝试使用需要 DI 的类运行 NUnit 测试时,错误输出:
处于状态时没有消息“TestExecution.TestResult”的处理程序 'TestExecutionSentTestRunnerProcessStartInfo' 发生异常 调用执行程序“executor://dotnetunittestexecutor/v1”时:无法 将数据写入传输连接:现有连接是 被远程主机强行关闭。现有的连接是 被远程主机强行关闭
在搜索该错误或任何有关将 DI 与 NUnit 结合使用的文档方面没有太多运气。我有一种感觉,我不应该像这样配置。但是,一些设置(连接字符串等)存在于通过 Startup.cs 注入的 appsettings.json 文件中。我如何在 NUnit 类中访问这些?
我的 Startup.cs,获取连接字符串并为 DI 做准备
public void ConfigureServices(IServiceCollection services)
{
//other Configurations happen here
//get the connection string values from appsettings.json
services.Configure<ConnectionStrings>(Configuration.GetSection("ConnectionStrings"));
//Classes that get DI'd
services.AddSingleton<IMyDAL, MyDal>();
services.AddSingleton<MyBLL>();
}
MyDAL 需要注入配置,可通过 Startup.cs 获得:
public class MyDAL : IMyDAL
{
private readonly string _dbConnectionString;
public MyDAL(IOptions<ConnectionStrings> connectionString)
{
_dbConnectionString = connectionString.Value.ConnectionString;
}
public bool DoDALStuff() { ... }
}
MyBLL 类需要注入 IMyDAL:
public class MyBLL
{
public readonly IMyDAL _myDAL;
public MyBLL(IMyDAL myDAL)
{
_myDAL = myDAL;
}
public bool DoBLLStuff() { ... }
}
我的 NUnit 类需要 BLL 注入来测试:
[TestFixture]
public class BLLTest
{
public MyBLL _myBLL;
public BLLTest(MyBLL myBLL)
{
_myBLL = myBLL;
}
[Test]
public void TestTheBLL()
{
Assert.IsTrue(_myBLL.DoBLLStuff() == true)
}
}
这就是我的常规程序流程的样子,但我可能会以错误的方式接近它,试图以相同的 DI 方式实现此单元测试。如果我删除测试类中的任何 DI/构造函数代码,测试运行良好,但我仍然需要在 BLL 中测试需要 DI 的方法。任何人都知道如何将 DI 对象放入我的测试类中使用?我是否使用了不正确的方法?
【问题讨论】:
标签: c# asp.net-core nunit asp.net-core-mvc