我想知道是否有可能通过反射或其他方式设置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但这听起来不像是你的问题。听起来,您希望在单元测试期间调用另一个构造函数,以防止设置变量的代码运行。为此,您必须对构造函数进行更改。