使用内部构造函数模拟 class

mock class with internal constructor

我有一些 class 我想模拟并且只有一个内部期待一些参数。因此,我将 InternalsVisibleTo 属性添加到我的被测系统并编写了以下代码:

var target = Substitute.For<MyClass>(testArgs);

其中 MyClass 是这样的:

public class MyClass
{
    internal MyClass(int i) { ... }
}

调试时我得到一个 NotSupporetedException 因为我没有默认构造函数。但是,由于我有一个内部的(由于 InternalsVisibleTo,我的测试程序集可以看到它),所以我希望改用那个。

当然我可以只创建构造函数 public 但这将允许我的 API 的任何用户创建我想避免的 MyClass 实例。为了使它正常工作,我错过了什么吗?

我们不必将 class 构造函数公开给 API,我们所要做的就是使构造函数 internal protected 使其对 [=19] 可见=]es 派生自 MyClass classes 在 MyClass 所在的程序集中。因此,NSubstitute 能够创建一个派生自 MyClass 的 class,并将构造函数调用重定向到基础构造函数。