[英]Use Moq to mock Constructor?
我有这样一组构造函数:
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<BusinessObjectContext>(null, null);
这将为您的两个参数传递空值。
另一种方法是创建仅供测试使用的内部构造函数,并使用InternalsVisibleTo
允许测试程序集使用它。 不幸的是,这有一个很大的缺点,如果你签署你的程序集, Moq无法使用构造函数 。 这应该在Moq的4.0版本中得到解决。
听起来好像你有一个代码味道 - 构造函数做了太多的工作 。 本文包含一组针对此类方案的修复程序。 基本上答案是只在构造函数中执行赋值,而不是执行业务逻辑。
如果您不想使用构造函数参数,则可以在模拟它时使用It.IsAny()方法传递。 它会传递null值。 当您使用此方法而不是写入null时,它将更具可读性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.