C# 如何模拟DbConnectionStringBuilder?

C# 如何模拟DbConnectionStringBuilder?,c#,.net,ado.net,moq,system.data,C#,.net,Ado.net,Moq,System.data,下面是一个复制异常的简单代码: var csbMock = new Mock<DbConnectionStringBuilder>(); var csb = csbMock.Object; csb.ConnectionString = "data source=.;integrated security=true"; Debug.WriteLine(csb.ConnectionString); // System.NullReferenceException in System.Da

下面是一个复制异常的简单代码:

var csbMock = new Mock<DbConnectionStringBuilder>();
var csb = csbMock.Object;
csb.ConnectionString = "data source=.;integrated security=true";
Debug.WriteLine(csb.ConnectionString); // System.NullReferenceException in System.Data.dll
var csbMock=new Mock();
var csb=csbMock.Object;
csb.ConnectionString=“数据源=;集成安全性=true”;
Debug.WriteLine(csb.ConnectionString);//System.Data.dll中的System.NullReferenceException
堆栈框架只包含一行:
位于System.Data.Common.DbConnectionStringBuilder.get\u ConnectionString()


我的目标只是能够获取/设置模拟的
DbConnectionStringBuilder.ConnectionString
属性。这里有什么问题?

这一行解决了问题:

csbMock.CallBase = true;

DbConnectionStringBuilder.ConnectionString
setter中发生了一些神奇的事情。它调用被代理覆盖的虚拟成员,然后这个NRE出现在getter中。

实际上没有必要模拟


使用该类不会产生连锁反应,因此您可以创建该类的实例并按原样使用它

var builder = new DbConnectionStringBuilder();
//Set the connection string directly
builder.ConnectionString = "data source=.;integrated security=true";
//or add the parts needed to create a connection string
builder.Clear();
builder.Add("integrated security", true);
builder.Add("Data Source", ".");

你知道你实际上不需要嘲笑它。你可以创建它的一个实例,并根据需要使用它。是的,看起来你是对的。将类用作isTrue不会产生连锁反应。我开始使用这种方法时认为它是抽象的,与
DbConnection