使用Moq来模拟构造函数?

我有这样一组构造函数:

public BusinessObjectContext() : this(CloudStorageAccount.FromConfigurationSetting("DataConnectionString").TableEndpoint.ToString(), CloudStorageAccount.FromConfigurationSetting("DataConnectionString").Credentials) {} public BusinessObjectContext(string dataConnectionString) : this(CloudStorageAccount.Parse(dataConnectionString).TableEndpoint.ToString(), CloudStorageAccount.Parse(dataConnectionString).Credentials) { } public BusinessObjectContext(String baseAddress, StorageCredentials credentials) : base(baseAddress, credentials) { } 

但是在测试/模拟时我需要没有任何连接字符串参数的对象。 我怎么能这样做 – 最好是在Moq?

这有可能吗?

听起来好像你有一个代码味道 – 构造函数做了太多的工作 。 本文包含一组针对此类方案的修复程序。 基本上答案是在构造函数中执行赋值,而不是执行业务逻辑。

 var myMockBOC = new Mock(null, null); 

这将为您的两个参数传递空值。

另一种方法是创建仅供测试使用的内部构造函数,并使用InternalsVisibleTo允许测试程序集使用它。 不幸的是,这有一个很大的缺点,如果你签署你的程序集, Moq无法使用构造函数 。 这应该在Moq的4.0版本中得到解决。