我面临以下问题:
我正在使用一个设计非常糟糕的 API(没有其他选择,使用不同的 API 不是一种选择),我想编写一些测试,但它们依赖于一个类的实例,我们称之为 A
,具有私有(private)构造函数。
我需要模拟那个A
,我根本不关心原来的行为,问题是我不能改变原来的类。
我有哪些选择?来自非静态类型的 ruby,我认为没有办法做到这一点,所以我不知道如何提出这个问题。
这不是我第一次有一个不是单例的类的私有(private)构造函数(可能它不是私有(private)的,它是内部的,但无论如何我无权访问它)
最佳答案
我在处理遗留代码时遇到过这个问题,这导致了经典的先有鸡还是先有蛋的问题:除非你有测试,否则你无法更改代码,但如果不更改代码,你就无法编写测试。
我使用 Microsoft Fakes 找到了出路,它可以模拟几乎所有东西,包括私有(private)构造函数。遗憾的是,它仅包含在 Visual Studio 的高级版和终极版(非专业版)中。如果你没有那个,一切都不会丢失 -- Moles ,最终催生假货的研究项目,仍然可以免费下载,并且工作原理基本相同。
我应该指出,一旦您能够使用 Fakes/Moles 可靠地编写测试和更改代码,最好的办法就是使用这种新功能使 API 更易于测试,如果只是因为 Fakes/Moles 是相当慢,并且会增加测试过程的开销。
关于c# - 使用我无法修改的类的私有(private)构造函数模拟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26399071/