使用VS2010单元测试类PrivateObject可以访问静态类中的私有静态字段吗?我可以使用VS2010 PrivateObject访问静态类中的静态字段吗?
让说,我有以下类:
public static class foo
{
private static bar;
}
我可以使用PrivateObject创建富的副本,然后拿到酒吧场?
使用VS2010单元测试类PrivateObject可以访问静态类中的私有静态字段吗?我可以使用VS2010 PrivateObject访问静态类中的静态字段吗?
让说,我有以下类:
public static class foo
{
private static bar;
}
我可以使用PrivateObject创建富的副本,然后拿到酒吧场?
可以使用反射来检索属性值。这将需要使用Type.GetField Method (String, BindingFlags)和FieldInfo.GetValue Method
string propertyName = "bar";
FieldInfo fieldInfo = typeof(foo).GetField(propertyName, BindingFlags.NonPublic | BindingFlags.Static);
object fieldValue = fieldInfo.GetValue(null);
这很棒!非常感谢! – 2011-03-10 07:52:15
PrivateType类是类似于PrivateObject用于调用私有静态成员。可以使用重载的GetStaticFieldOrProperty方法。 http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.privatetype(v=VS.100).aspx
应该使用InvokeStatic方法。 – 2012-09-18 15:29:16
Deepun的答案可能非常有用。我想添加一个具体的例子来帮助那些以这种方式出现的人。
具有私有静态成员的类。
public class foo
{
private static int bar;
}
获得价值的代码。
PrivateType pt = new PrivateType(typeof(foo));
int bar = (int)pt.GetStaticFieldOrProperty("bar");
代码来更改值
PrivateType pt = new PrivateType(typeof(foo));
pt.SetStaticFieldOrProperty("bar", 10);
不管这将工作类是静态或没有的。
为什么你需要访问单元测试中的私人领域?这通常不是最佳做法。 – CheeZe5 2011-03-09 16:04:31
我不能更改测试的代码,但我确实想要从一个特定的专用字段中获取数据... – 2011-03-09 16:06:47
[C# - 从静态类获取专用字段]的可能重复(http://stackoverflow.com/questions/628666/c-get-private-field-from-static-class) – 2011-03-09 16:16:04