我可以设置私有只读实例变量吗?

本文关键字:变量 实例 只读 设置 我可以 | 更新日期: 2023-09-27 18:13:25

我想知道是否有可能通过反射或其他方式设置private readonly类变量?

考虑以下类:

public class TestSevice
{
    private readonly someClassType m_variable;
    public TestService()
    {
        m_variable = //call to some processing function
    }
    private static int CalculateStuff(int x, int y)
    {
        //some processing and return
    }
}

我正在为private static方法CalculateStuff(int x, int y)编写单元测试,我可以通过反射调用:

PrivateType pt = new PrivateType(typeof(AvatarService));
int actialRes = (int)pt.InvokeStatic("CalculateStuff", parameters);

问题是,对于我的单元测试工作,我不想在调用static函数时设置m_variable或设置为null

所以,是否有可能与构造函数是无参数的因素不设置m_variable或自定义设置到单元测试中的东西?

编辑:

//call to some processing function的一些细节这里,一个调用被用来启动消息队列的接收者。

TestService在worker角色开始时实例化,因此队列接收器在actor中启动。然后消息队列接收方调用TestSevice类中的包装器函数,该函数又调用CalculateStuff。由于我只想测试核心业务逻辑,所以我不想启动队列接收器(这会强加某些依赖)。

我可以设置私有只读实例变量吗?

如果您试图通过修改类的行为来测试它,那么您已经错过了重点。

如果有一个类可以进入某个测试,那么这就是你应该测试它的方式。对于只读,实现这一点的唯一方法是通过构造函数。

如果属性是只读的,这表明你只想为该类的特定实例实例化它一次,并且知道它不能改变。如果是这种情况,您不应该更改它,但可能会实例化另一个实例。

如果需要在每次调用compute之前更改它,并且您认为需要将函数保持静态,那么您可能应该将其作为额外的参数。这意味着它可以不再是只读的。这样做会断开它与给定实例的状态,但如果你正在尝试/需要改变值,它不应该是只读的。

显然答案是肯定的。https://stackoverflow.com/a/934942/2540156但这听起来不像是你的问题。听起来,您希望在单元测试期间调用另一个构造函数,以防止设置变量的代码运行。为此,您必须对构造函数进行更改。