PrivateObject类的GetField()方法可以访问C#4.0中的私有const字符串吗?

时间:2011-03-22 13:37:53

标签: c# visual-studio-2010 unit-testing

我正在编写一个单元测试来访问隔离数据存储中的文件。文件名存储在类中的私有const字符串中,因为我不在整个应用程序中的任何其他位置使用它。

然而,当我运行单元测试时,当我调用PrivateObject类实例的GetField(“fieldName”)方法时,我收到“找不到字段”错误。

string historyFileName = (string)history.GetField("ISOLATED_HISTORY_FILE");

3 个答案:

答案 0 :(得分:5)

使用您可以传递BindingFlags并传递BindingFlags.NonPublic | BindingFlags.Instance的重载。

看看here


更新

我以为你有一个领域。在编译时,Const确实被文字替换。更改为static readonly并传递BindingFlags.NonPublic | BindingFlags.Static

如果您无法更改来源,则无法

答案 1 :(得分:2)

使用PrivateType然后调用GetStaticField方法来检索私有const的值。

答案 2 :(得分:0)

我发现任何可能遇到同样问题的人都有问题。我将字段从私有const字符串更改为私有字符串。显然,反射不能识别用const标记的字段。这不是我提交的名称,因为我尝试使用ISOLATED_HISTORY_FILE和IsolatedHistoryFile进行测试,并且它可以双向工作。