我可以使用VS2010 PrivateObject来访问静态类中的静态字段吗?
是否可以使用VS2010unit testing类PrivateObject访问静态类中的私有静态字段?
假设我有以下课程:
public static class foo { private static bar; }
我可以使用PrivateObject创建foo的副本,然后获取bar字段吗?
可以使用reflection来检索属性值。 这将需要使用Type.GetField方法(String,BindingFlags)和FieldInfo.GetValue方法
string propertyName = "bar"; FieldInfo fieldInfo = typeof(foo).GetField(propertyName, BindingFlags.NonPublic | BindingFlags.Static); object fieldValue = fieldInfo.GetValue(null);
PrivateType类类似于PrivateObject,用于调用私有静态成员。 可以使用重载的GetStaticFieldOrProperty方法。 http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.privatetype(v=VS.100).aspx
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);
无论是否为静态类,这都可以工作。