如何扩展具有私有构造函数的对象?

时间:2014-03-11 17:36:35

标签: c# unit-testing constructor

我有一个person对象,它有一个来自外部服务的私有构造函数。在构造函数中,firstnamelastname将从数据库中删除。现在进行单元测试,我想提供firstnamelastname,以便不在单元测试中命中数据库。

如何扩展我的类并添加一个构造函数扩展,以便在单元测试中提供firstnamelastname

2 个答案:

答案 0 :(得分:2)

如果一个类只有有一个私有构造函数,除了作为嵌套类型之外,你根本无法从它派生。基本上听起来你想要使用的类型不适合在测试中使用:(

当你说类型"来自外部服务" - 你到底是什么意思?您的意思是源代码根本不在您的控制之下吗?或者它是部分在你的控制之下?例如,如果这是生成的代码,您可以考虑添加构建步骤来修改它......

答案 1 :(得分:1)

  1. 构造函数不是继承的,因此您需要为派生类定义 new 构造函数。
  2. 通过派生类进行单元测试并不是一个好主意,因为您需要复制任何私有实现。
  3. 听起来您的类与某些外部数据源紧密耦合 - 您是否可以注入某种可在单元测试中模拟的提供程序?

    修改

    根据评论,似乎这是第三方库,在这种情况下,对您进行单元测试不是您的责任。您应该对您的代码进行单元测试,并模拟/存根使用第三方库(这也意味着您应该通过某种接口松散地使用库)。