是否可以使用VS2010 Unit Test类PrivateObject访问静态类中的私有静态字段?
假设我有以下课程:
public static class foo
{
private static bar;
}
我可以使用PrivateObject创建 foo 的副本,然后获取 bar 字段吗?< / p>
答案 0 :(得分:30)
PrivateType类类似于PrivateObject,用于调用私有静态成员。可以使用重载的GetStaticFieldOrProperty方法。 http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.privatetype(v=VS.100).aspx
答案 1 :(得分:7)
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);
无论该类是否为静态,这都可以正常工作。
答案 2 :(得分:6)
可以使用反射检索属性值。这需要使用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);