如何访问私有方法中的对象



我已经使用PowerMock/Mockito模拟了私有方法,现在我的问题是我如何访问这个方法中声明的对象?

例如

private void method1()
{
MyObject ob = new MyObject();
}

现在在我的测试代码中,我想访问object对象来验证值

本指南详细介绍了如何使用PowerMock模拟构造函数调用:

…但是使用PowerMock,您不必更改代码,相反,您可以指示PowerMock拦截对new File(..)的调用,并返回一个mock对象。要做到这一点,我们首先像往常一样创建一个File.class类型的模拟:

File fileMock = createMock(File.class);

要期望调用new File,只需执行以下操作:

expectNew(File.class, "directoryPath").andReturn(fileMock);
所以在你的情况下,你应该在你的测试用例或设置方法: 中有这些
MyObject mockOb = createMock(MyObject.class);
expectNew(MyObject.class).andReturn(mockOb);

通过添加这些,您将有以下行为:

只要在中有一个new MyObject(),您的代码由测试用例运行,将返回由PowerMock模拟的对象实例。因此,无论在你的代码中创建一个新的MyObject实例,它将是由createMock()函数创建的完全相同的一个。

编辑

为例
Class A { 
 private void method1() 
 { 
   Obj obj = new Obj(); 
    obj.setX(10);
 } 
 //Here I want to access the obj object to verify the values 
}

要做到这一点,你必须有一点不同的想法。

  1. 创建A实例
  2. 为Obj构造函数设置mock
  3. 运行触发pruivate method1()的逻辑
  4. 检查模拟Obj实例上的值
    • 如果值不可测试(在逻辑中修改了它),则可以检查setX()是否在适当的时间被调用。

下面的内容:

@Test
public void testMyPrivateMethod() {
    //1. object with the logic to test
    A a = new A();
    //2. set up mocking
    Obj mockObj = createMock(Obj.class);
    expectNew(Obj.class).andReturn(mockObj);
    //3. trigger logic to test
    a.someOtherMethodThatCallsMethod1();
    //4. test Obj (find out if setX() has been called or not)
    verify(mockObj).setX(any(Integer.class));
}

相关内容

  • 没有找到相关文章

最新更新