[英]How to access the object inside the private method?
我使用PowerMock / Mockito模拟了私有方法,现在我的问题是如何访问此方法中声明的对象?
例如 。
private void method1()
{
MyObject ob = new MyObject();
}
现在在我的测试代码中,我想访问ob对象以验证值。
本指南详细介绍了如何使用PowerMock模拟构造函数调用:
...但是使用PowerMock不必更改代码,而是可以指示PowerMock截获对新File(..)的调用并返回模拟对象。 为此,我们像往常一样创建File.class类型的模拟:
File fileMock = createMock(File.class);
期望可以调用新文件,我们只需执行以下操作:
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 }
要做到这一点,您必须有所不同。
pruivate method1()
遵循以下原则:
@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));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.