La réponse de @edutesoy pointe vers la documentation de PowerMockito
et mentionne le mocking des constructeurs comme un indice mais ne mentionne pas comment l'appliquer au problème actuel de la question.
Voici une solution basée sur ce principe. En prenant le code de la question :
public class MyClass {
void method1 {
MyObject obj1 = new MyObject();
obj1.method1();
}
}
Le test suivant créera une copie de l'interface utilisateur de l'application MyObject
en préparant la classe d'instance qui l'instancie (dans cet exemple je l'appelle MyClass
) avec PowerMock
et en laissant PowerMockito
pour stub le constructeur de MyObject
puis vous permet de bloquer la classe MyObject
instance method1()
appeler :
@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
}
}
Avec cela, votre interne method1()
retournera ce que vous voulez.
Si vous aimez les lignes uniques, vous pouvez raccourcir le code en créant l'objet fantaisie et le stub en ligne :
MyObject myObjectMock = when(mock(MyObject.class).method1()).thenReturn(<whatever you want>).getMock();