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