Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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
C# 多线程环境中模拟Dbcontext的正确方法_C#_.net_Entity Framework_Entity Framework 6 - Fatal编程技术网

C# 多线程环境中模拟Dbcontext的正确方法

C# 多线程环境中模拟Dbcontext的正确方法,c#,.net,entity-framework,entity-framework-6,C#,.net,Entity Framework,Entity Framework 6,在实体框架中,DBContext不是 . 为了支持多线程环境,每次需要与SQL通信时,我都必须基于连接字符串初始化一个新的DbContext private void function(string sqlConnectionString) { using (var dbContext = new DbContext(sqlConnectionString)) { // talk to sql here } } 现在单元测试变得很棘手。由于DbConte

在实体框架中,DBContext不是 . 为了支持多线程环境,每次需要与SQL通信时,我都必须基于连接字符串初始化一个新的DbContext

private void function(string sqlConnectionString)
{
    using (var dbContext = new DbContext(sqlConnectionString))
    {
        // talk to sql here
    }
}
现在单元测试变得很棘手。由于DbContext隐藏在代码中,因此我无法传递模拟的DbContext


我在网上查了一下,但没有找到好的解决办法。有什么建议吗?

要进行单元测试,我将为
DbContext
创建一个工厂,并注入工厂。这家工厂现在可以换成新的。对于单元测试部分,被替换的
DbContext
工厂将返回一个新的
DbContext
,并连接到内存数据库,如

在单元测试的代码中:

//Arrange
var connectionStringForEffortDatabase = ...
var dbCotextFactory = Substitute.For<IDbContextFactory>();
dbContextFactory.Create().Returns(new DbContext(connectionStringForEffortDatabase));

//Act
function(dbContextFactory);

//Assert
Assert.Something():
//排列
var connectionStringForefortDatabase=。。。
var dbCotextFactory=Substitute.For();
返回(新的DbContext(ConnectionStringForefortDatabase));
//表演
函数(dbContextFactory);
//断言
Assert.Something():

您使用的是哪种IoC框架?
//Arrange
var connectionStringForEffortDatabase = ...
var dbCotextFactory = Substitute.For<IDbContextFactory>();
dbContextFactory.Create().Returns(new DbContext(connectionStringForEffortDatabase));

//Act
function(dbContextFactory);

//Assert
Assert.Something():