c# - 使用我无法修改的类的私有(private)构造函数模拟对象

标签 c# testing mocking

我面临以下问题: 我正在使用一个设计非常糟糕的 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/

相关文章:

python - MagicMock 如何在调用随机方法时避免抛出 AttributeError?

c# - 有没有办法从 SQL 表或查询生成对象初始值设定项?

c# - 使用相同的锁修改锁内的对象

c# - 在什么时候我需要处理我的自定义 WPF 用户控件?

c# - 未找到匹配的创建者

reactjs - Ant Design 和 React 测试库

当使用任何属性时,Python模拟创建一个假对象返回字典

c# - 当 UTC 与时区偏移一起使用时,DateTime.Parse 方法中是否存在错误?

javascript - TestCafe,带有 Electron 抛出的 “Uncaught TypeError: Cannot read property '源未定义”

.net - 最小起订量 - 好的示例应用程序