Mocking methods of local scope objects with Mockito
local, mocking, mockito, object
Solution
The answer from @edutesoy points to the documentation of `PowerMockito` and mentions constructor mocking as a hint but doesn't mention how to apply that to the current problem in the question.
Here is a solution based on that. Taking the code from the question:
public class MyClass {
void method1 {
MyObject obj1 = new MyObject();
obj1.method1();
}
}
The following test will create a mock of the `MyObject` instance class via preparing the class that instantiates it (in this example I am calling it `MyClass`) with `PowerMock` and letting `PowerMockito` to stub the constructor of `MyObject` class, then letting you stub the `MyObject` instance `method1()` call:
@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClass.class)
public class MyClassTest {
@Test
public void testMethod1() {
MyObject myObjectMock = mock(MyObject.class);
when(myObjectMock.method1()).thenReturn(<whatever you want to return>);
PowerMockito.whenNew(MyObject.class).withNoArguments().thenReturn(myObjectMock);
MyClass objectTested = new MyClass();
objectTested.method1();
... // your assertions or verification here
}
}
With that your internal `method1()` call will return what you want.
If you like the one-liners you can make the code shorter by creating the mock and the stub inline:
MyObject myObjectMock = when(mock(MyObject.class).method1()).thenReturn(<whatever you want>).getMock();
Problem
I need some help with this: Example: ``` void method1{ MyObject obj1=new MyObject(); obj1.method1(); } ``` I want to mock `obj1.method1()` in my test but to be transparent so I don't want make and change of code. Is there any way to do this in Mockito?