我可以使用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); 

无论是否为静态类,这都可以工作。