Yif*_*zur 19 .net c# visual-studio-2010
是否可以使用VS2010单元测试类PrivateObject访问静态类中的私有静态字段?
假设我有以下课程:
public static class foo
{
private static bar;
}
Run Code Online (Sandbox Code Playgroud)
我可以使用PrivateObject创建foo的副本,然后获取bar字段吗?
小智 31
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;
}
Run Code Online (Sandbox Code Playgroud)
代码获得价值.
PrivateType pt = new PrivateType(typeof(foo));
int bar = (int)pt.GetStaticFieldOrProperty("bar");
Run Code Online (Sandbox Code Playgroud)
代码改变价值
PrivateType pt = new PrivateType(typeof(foo));
pt.SetStaticFieldOrProperty("bar", 10);
Run Code Online (Sandbox Code Playgroud)
无论是否为静态类,这都可以工作.
可以使用反射来检索属性值.这将需要使用Type.GetField方法(String,BindingFlags)和FieldInfo.GetValue方法
string propertyName = "bar";
FieldInfo fieldInfo = typeof(foo).GetField(propertyName, BindingFlags.NonPublic | BindingFlags.Static);
object fieldValue = fieldInfo.GetValue(null);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7746 次 |
| 最近记录: |