- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在测试一个属于层次结构的类。我一直在用被测对象和一个 PrivateObject
来设置我的测试类以允许访问该对象。当我尝试访问父类的私有(private)成员时出现异常。
到目前为止,我发现的唯一解决方法是将指定基类的 PrivateType
传递给 PrivateObject
构造函数,但它不适用于私有(private)成员的子类。
有什么方法可以做到这一点,也许是通过在 Private 对象的 Get* 方法上使用绑定(bind)标志参数?
我确实尝试过使用自动生成的访问器类(在主类中右键单击,创建私有(private)访问器)。然而,更糟糕的是:它显示了一个我可以读取的属性,但它抛出了与 PrivateObject 相同的异常,而且我没有其他选项(绑定(bind)标志或诸如此类)可以用来修复异常。
这是我的示例测试代码。我希望有某种方法来构造和使用 PrivateObject 来检索这两个字段。
public class BaseClass
{
private int one = 1;
}
public class SubClass : BaseClass
{
private int two = 2;
}
[TestClass]
public class UnitTest1
{
BindingFlags flags = BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
[TestMethod]
public void TestMethod1()
{
SubClass test = new SubClass();
PrivateObject priv = new PrivateObject(test);
Assert.AreNotEqual<int>(0, (int)priv.GetFieldOrProperty("one", flags)); // System.MissingMethodException: Method 'PrivateObjectTester.SubClass.one' not found.
Assert.AreNotEqual<int>(0, (int)priv.GetFieldOrProperty("two", flags));
}
[TestMethod]
public void TestMethod2()
{
SubClass test = new SubClass();
PrivateObject priv = new PrivateObject(test, new PrivateType(typeof(BaseClass)));
Assert.AreNotEqual<int>(0, (int)priv.GetFieldOrProperty("one", flags));
Assert.AreNotEqual<int>(0, (int)priv.GetFieldOrProperty("two", flags)); // System.MissingMethodException: Method 'PrivateObjectTester.BaseClass.two' not found.
}
}
最佳答案
我没有找到答案,所以这就是我最终要做的。我为类层次结构的每个级别创建了 PrivateObjects
,我只需要在编写测试用例时小心使用正确的测试用例即可。
public class BaseClass
{
private int one = 1;
}
public class SubClass : BaseClass
{
private int two = 2;
}
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod()
{
SubClass test = new SubClass();
PrivateObject privSub = new PrivateObject(test, new PrivateType(typeof(SubClass)));
PrivateObject privBase = new PrivateObject(test, new PrivateType(typeof(BaseClass)));
Assert.AreNotEqual<int>(0, (int)privBase.GetFieldOrProperty("one"));
Assert.AreNotEqual<int>(0, (int)privSub.GetFieldOrProperty("two"));
}
}
关于c# - 如何使用 PrivateObject 访问我的类及其父类的私有(private)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5396996/
我的结构基本上是这样的: abstract class A { protected string Identificator { get; set; } private void DoSo
我正在使用 Visual Studio 2017,我试图在 C# 中创建私有(private)方法的单元测试(代码如下): [TestClass] public class CalculatorTes
我正在尝试在单元测试项目中测试私有(private)方法。到目前为止一切顺利,但是当我必须测试带有 out 参数的方法时,我遇到了一个问题。该方法的签名是: private bool GotSSI(o
我读了this thread我想知道为什么有人应该使用 PrivateObject。我看不到任何通过纯反射在这么多步骤中无法实现的值(value)。此外,PrivateObject 还使用了反射。 该
我有一个小但很烦人的问题。 我正在使用 PrivateObject 进行一些测试以访问类中的各种方法。这一切都很好。然而,当方法签名包含“ref”时,ref 关键字似乎没有任何作用。 private
这个问题在这里已经有了答案: How to pass a parameter as a reference with MethodInfo.Invoke (2 个答案) 关闭 8 年前。 我正在尝试
我正在为计算软件编写单元测试。在测试用例中,我使用“PrivateObject”来访问私有(private)方法“sendNumberToCalculation()”,但我在未找到的类型上获取错误构造
我正在学习本教程,https://learn.microsoft.com/en-us/dotnet/core/testing/unit-testing-with-mstest 但我没有可用的 Priv
我正在尝试在模拟对象上测试私有(private)方法。请冷静下来,我知道您正在拔干草叉。 我很清楚要说的一切都可以通过对我大喊 REFACTOR 来回答。我只需要一个直接的答案。有人看着我的眼睛告诉我
“反射”是指使用 System.Reflection 命名空间。 MSDN 谈到 PrivateObject 类:“允许测试代码......”。与 System.Reflection 相比,我更喜欢
是否可以使用 VS2010 单元测试类 PrivateObject 访问静态类中的私有(private)静态字段? 假设我有以下类(class): public static class foo {
如果我有私有(private)类 Class A { public static string foo; } 我可以使用反射来访问该静态字段吗?当然假设我不能更改代码... 我遇到的问题是类是
我正在测试一个属于层次结构的类。我一直在用被测对象和一个 PrivateObject 来设置我的测试类以允许访问该对象。当我尝试访问父类的私有(private)成员时出现异常。 到目前为止,我发现的唯
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 4 年前。 Improve this qu
基本上,我的一些测试成功了,一些失败了。根据 Skeet 先生的出色建议,我创建了一个完整的代码示例以确认我没有疯。这是代码: namespace ClassLibrary { using S
我试图对私有(private)方法进行简单的单元测试,我让 VS2010 自动生成方法 stub 并添加缺少的信息:这是我的代码 [TestMethod()] [DeploymentI
我正在编写一个访问独立数据存储中文件的单元测试。文件名存储在类中的私有(private) const 字符串中,因为我不会在整个应用程序的其他任何地方使用它。 但是,当我运行单元测试时,当我调用 Pr
我是一名优秀的程序员,十分优秀!