【发布时间】:2014-09-11 20:52:46
【问题描述】:
如何在单元测试中访问私有成员?我尝试使用 PrivateObject,但重载构造函数在这里,我收到 _inkContainerValue 错误。我可以在不使用类对象的情况下访问私有成员吗?
public class Pen
{
private int _inkContainerValue = 1000;
#region Constructors
public Pen(int inkContainerValue)
{
this._inkContainerValue = inkContainerValue;
}
#endregion
}
}
【问题讨论】:
-
通常你不应该测试你的私人成员。如果您的测试需要访问它们,那么您应该重新考虑您的设计。不过,当我没有那种奢侈时,我通常会使用反射。
-
我知道如何使用反射,但我不能这样做,因为这里是构造函数重载
-
访问字段和构造函数重载有什么关系?
-
我回应@SriramSakthivel。无论使用哪个构造函数来创建对象,_inkContainerValue 字段都将具有传递给被调用构造函数的inkContainerValue 参数的值。代码中有三个位置设置了值(不包括冗余字段初始值设定项),但对于任何给定的对象,只有其中一个位置被调用。
-
我认为有人只是忘记声明一个没有参数的构造函数。正如@phoog 所说,如果没有在构造函数中声明 1000,我无法将 _inkContainerValue 设为 1000。当然,在尝试获取时这里没有关系一个类的成员,但我绝对做不到,因为没有没有参数的构造函数。悖论
标签: c# unit-testing private-members constructor-overloading