Lors de l'utilisation de Mockito, j'ai toujours été cherché sur Google comment me moquer dans ce cas, mais j'ai décidé de le résumer car il est inefficace. Je veux vraiment utiliser JMockit, mais comme la magie noire est interdite, j'utilise Mockito.
Nous n'avons pas encore pu passer au 2ème système, donc Mockito1x est un prérequis. Mockito 1.10.19 JUnit 4.11 Java 1.8.0_151
Une chose à garder à l'esprit avec Mockito est que la méthode de simulation diffère selon que la valeur de retour de la méthode est nulle ou non. Sur cette base, nous l'avons classé dans les six catégories suivantes.
No | Type de retour de la méthode de cible fictive | Gamme Mock | Opération simulée |
---|---|---|---|
1 | Autre que nul | L'ensemble | Renvoie la valeur de retour spécifiée |
2 | Autre que nul | L'ensemble | Lancer une exception |
3 | void | L'ensemble | Lancer une exception |
4 | Autre que nul | Seulement quelques méthodes | Renvoie la valeur de retour spécifiée |
5 | Autre que nul | Seulement quelques méthodes | Lancer une exception |
6 | void | Seulement quelques méthodes | Lancer une exception |
Au fait, le cas où la méthode privée, la méthode statique et l'objet dépendant sont générés par new est dans le cadre de PowerMock, donc j'écrirai un autre article. → Je l'ai écrit. Comment se moquer de chaque cas avec PowerMock + Mockito1x https://qiita.com/taka_22/items/27ea1fbf9c305ba83dcc
No.1 /**
Méthode publique, le type de retour est tout simulé sauf void, valeur de retour */ @Test public void test001() { List mockedList = mock(List.class);
when(mockedList.get(0)).thenReturn("aaa");
assertThat((String)mockedList.get(0), is("aaa"));
assertNull(mockedList.get(1));
}
No.2 /**
Méthode publique, le type de retour est tout simulé sauf void, lance une exception */ @Test public void test002() { List mockedList = mock(List.class);
when(mockedList.get(0)).thenThrow(new RuntimeException("aaa"));
try {
mockedList.get(0);
fail();
} catch(RuntimeException e) {
assertThat(e.getMessage(), is("aaa"));
}
assertNull(mockedList.get(1));
}
No.3 Le fait est que doThrow vient en tête.
/**
méthode publique, le type de retour est void, tout simulé, lance une exception */ @Test public void test003() { List mockedList = mock(List.class);
doThrow(new RuntimeException("aaa")).when(mockedList).clear();
try {
mockedList.clear();
fail();
} catch(RuntimeException e) {
assertThat(e.getMessage(), is("aaa"));
}
assertNull(mockedList.get(0));
}
No.4 Si vous ne voulez vous en moquer qu'une partie, utilisez l'espion au lieu de vous moquer. Il est utilisé lorsque vous souhaitez modifier le comportement d'une méthode qui n'est pas testée et qui est appelée par la méthode à tester.
/**
// J'ai ajouté "bbb" à l'objet réel spiedList.add("bbb"); // Spy now get (0) renvoie "aaa" when(spiedList.get(0)).thenReturn("aaa");
// Le résultat est "aaa" assertThat((String)spiedList.get(0), is("aaa")); // D'autres méthodes renvoient de vrais résultats assertThat(spiedList.size(), is(1)); }
No.5 /**
// J'ai ajouté "bbb" à l'objet réel spiedList.add("bbb"); // Spy now get (0) lance RuntimeException when(spiedList.get(0)).thenThrow(new RuntimeException("aaa"));
try {
spiedList.get(0);
fail();
} catch(Exception e) {
assertThat(e.getMessage(), is("aaa"));
}
// D'autres méthodes renvoient de vrais résultats assertThat(spiedList.size(), is(1)); }
No.6 /**
// Ajoute "bbb" à l'objet réel spiedList.add("bbb"); // Lance une RuntimeException lorsque clear est appelé doThrow(new RuntimeException("aaa")).when(spiedList).clear();
try {
spiedList.clear();
fail();
} catch(RuntimeException e) {
assertThat(e.getMessage(), is("aaa"));
}
// D'autres méthodes renvoient de vrais résultats assertThat(spiedList.size(), is(1)); assertThat((String)spiedList.get(0), is("bbb")); }
Mockito http://site.mockito.org/
https://github.com/taka2/mockito-sample
https://qiita.com/taka_22/items/27ea1fbf9c305ba83dcc
Recommended Posts