使用我无法修改的类的私有构造函数来模拟对象

时间:2014-10-16 07:55:18

标签: c# testing mocking

我面临以下问题: 我使用设计非常糟糕的API(没有别的选择,使用不同的API不是一个选项)我想写一些测试,但他们依赖于一个类的实例,让&#39 ; s称之为A,它有一个私有构造函数。

我需要嘲笑A,我根本不关心原始行为,问题是我无法改变原来的类。

我有什么选择?来自不是静态类型的ruby,我认为没有办法做到这一点,所以我不知道如何解决这个问题。

这不是我第一次有一个私人构造函数,因为它不是一个单身人士(可能它不是私人的,它是内部的,但在任何一个我无法访问它的情况)

1 个答案:

答案 0 :(得分:1)

我使用遗留代码时遇到了这个问题,导致了经典的鸡和蛋问题:除非您已经通过测试,否则无法更改代码,但是您无法进行测试在不改变代码的情况下编写测试。

我找到了使用Microsoft Fakes的方法,它可以模拟几乎所有内容,包括私有构造函数。不幸的是,它仅包含在Visual Studio(非专业版)的Premium和Ultimate版本中。如果你没有这一切,那么一切都不会丢失 - Moles,最终产生Fakes的研究项目仍然可以免费下载并且工作方式大致相同。

我应该指出,一旦你能够使用Fakes / Moles编写测试并可靠地更改代码,最好的办法是使用这种新功能使API更易测试,只要因为Fakes / Moles是相当慢,会增加测试过程的开销。