我面临以下问题:
我使用设计非常糟糕的API(没有别的选择,使用不同的API不是一个选项)我想写一些测试,但他们依赖于一个类的实例,让&#39 ; s称之为A
,它有一个私有构造函数。
我需要嘲笑A
,我根本不关心原始行为,问题是我无法改变原来的类。
我有什么选择?来自不是静态类型的ruby,我认为没有办法做到这一点,所以我不知道如何解决这个问题。
这不是我第一次有一个私人构造函数,因为它不是一个单身人士(可能它不是私人的,它是内部的,但在任何一个我无法访问它的情况)
答案 0 :(得分:1)
我使用遗留代码时遇到了这个问题,导致了经典的鸡和蛋问题:除非您已经通过测试,否则无法更改代码,但是您无法进行测试在不改变代码的情况下编写测试。
我找到了使用Microsoft Fakes的方法,它可以模拟几乎所有内容,包括私有构造函数。不幸的是,它仅包含在Visual Studio(非专业版)的Premium和Ultimate版本中。如果你没有这一切,那么一切都不会丢失 - Moles,最终产生Fakes的研究项目仍然可以免费下载并且工作方式大致相同。
我应该指出,一旦你能够使用Fakes / Moles编写测试并可靠地更改代码,最好的办法是使用这种新功能使API更易测试,只要因为Fakes / Moles是相当慢,会增加测试过程的开销。