我想知道是否可以通过反射或其他方式设置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);问题是,为了使我的单元测试正常工作,我不希望在调用m_variable函数时将其设置为null或将其设置为static。
那么,使用构造函数是无参数的ctor是否可以不将m_variable或自定义设置为单元测试中的某些内容?
编辑:关于//call to some processing function的一些细节,这里调用启动消息队列的接收方。
在worker角色开始时实例化类TestService,因此队列接收器在ctor中启动。然后,消息队列接收器在TestSevice类中调用包装器函数,然后调用CalculateStuff。而且,由于我只想测试核心业务逻辑,所以我不想启动队列接收器(这会造成某些依赖)。
发布于 2014-07-18 14:50:09
如果您试图通过修改类的行为来测试一个类,那么您已经忽略了这一点。
如果有一种方法可以让该类进入特定的测试,那么就应该这样测试它。只有通过构造函数才能做到这一点。
如果该属性是只读的,则建议您只对该类的特定实例实例化它一次,并知道它不能更改。如果是这样的话,您应该不想更改它,但可能要实例化另一个实例。
如果需要在每次调用计算之前对其进行更改,并且您认为需要该函数是静态的,那么您可能应该将它作为额外的参数。这意味着它可以被读得更长。这样做会将其与给定实例的状态断开连接,但如果您试图/需要更改该值,则不应只读取该值。
发布于 2014-07-18 15:47:31
显然答案是肯定的。https://stackoverflow.com/a/934942/2540156,但这听起来并不像你的问题。听起来,您需要在单元测试期间调用备用构造函数,这将阻止运行设置变量的代码。为此,您必须对构造函数进行更改。
https://stackoverflow.com/questions/24827348
复制相似问题