2011-03-09 76 views
15

使用VS2010单元测试类PrivateObject可以访问静态类中的私有静态字段吗?我可以使用VS2010 PrivateObject访问静态类中的静态字段吗?

让说,我有以下类:

public static class foo 
{ 
    private static bar; 
} 

我可以使用PrivateObject创建的副本,然后拿到酒吧场?

+2

为什么你需要访问单元测试中的私人领域?这通常不是最佳做法。 – CheeZe5 2011-03-09 16:04:31

+0

我不能更改测试的代码,但我确实想要从一个特定的专用字段中获取数据... – 2011-03-09 16:06:47

+0

[C# - 从静态类获取专用字段]的可能重复(http://stackoverflow.com/questions/628666/c-get-private-field-from-static-class) – 2011-03-09 16:16:04

回答

5

可以使用反射来检索属性值。这将需要使用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); 
+0

这很棒!非常感谢! – 2011-03-10 07:52:15

5

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); 

不管这将工作类是静态或没有的。

相关问题