Je veux tester cette méthode mais à l'intérieur de la méthode un nouvel objet est créé et ensuite une méthode de ce nouvel objet est appelée. Je veux sauter cela (cela implique de se connecter sur un serveur j2ee db qui ne m'intéresse pas). Comme un exemple simple, je veux juste vérifier que param1.logic() est appelé une fois, mais le test échoue parce que obj essaie de se connecter avec des informations d'identification que je ne veux pas prendre la peine d'entrer. Il n'y a aucun getters ou setters pour la variable obj Object2 privée, mais existe-t-il un moyen d'ignorer le constructeur et l'appel de connexion suivant?Mockito - Comment ignorer l'appel de méthode d'un objet membre privé?
public class Object1{
private Object2 obj;
public void method(Object3 param1, String param2){
//functionality
//logic to be tested
param1.logic();
//end functionality
//how can I skip these two lines?
obj = new Object2(param1);
obj.logon(param2,param2,null, false);
}
}
Voici ce que j'ai essayé d'utiliser mais les méthodes dans obj.logon sont toujours appelées.
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.powermock.api.mockito.PowerMockito;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest(Object2.class)
public class TestObject
{
@SuppressWarnings("unchecked")
@Before
public void init() throws Exception
{
var1 = mock(Object3.class)
obj2 = mock(Object2.class);
PowerMockito.whenNew(Object2.class).withAnyArguments().thenReturn(obj2);
}
@Test
public void testInvokeStandAloneJob() throws Exception
{
TestObject test = spy(new TestObject());
Mockito.doAnswer(new Answer<Object>(){
public Object answer(InvocationOnMock invocation){
Object[] args = invocation.getArguments();
return "called with arguments: " + args;
}
}).when(obj2).logon(Mockito.anyString(), Mockito.anyString(),Mockito.anyString(), Mockito.anyBoolean());
//also tried doNothing
//Mockito.doNothing().when(obj2).logon(sDomainName, username,null, false);
//call method
test.method(var1, var2);
verify(var1,times(1)).logic();
}
Comment puis-je faire ces 2 lignes (le constructeur et la méthode suivante ne rien faire?)
Rechercher dans la liaison du fournisseur de services Je ne suis pas sûr que cela va vous être utile, vous pouvez enchérir la classe obj avec un impl implicitement pour ce test. N'oubliez pas de supprimer les liaisons d'exécution. – StackFlowed