[JAVA] Comment se moquer de chaque cas avec PowerMock + Mockito1x

Aperçu

Comment se moquer de chaque cas avec Mockito 1x https://qiita.com/taka_22/items/0c13aacf6ffbc2c77970 A continué.

supposition

Mockito 1.10.19 PowerMock 1.7.3 JUnit 4.11 Java 1.8.0_151

Cas

Gère les cas où des objets dépendants sont créés avec de nouvelles méthodes statiques et des méthodes privées. Sur la base du modèle précédent, nous l'avons classé dans les 12 modèles suivants.

No modèle Type de retour de la méthode de cible fictive Gamme Mock Opération simulée
7 La classe que vous souhaitez simuler est générée avec un nouveau Autre que nul L'ensemble Renvoie la valeur de retour spécifiée
8 La classe que vous souhaitez simuler est générée avec un nouveau Autre que nul L'ensemble Lancer une exception
9 La classe que vous souhaitez simuler est générée avec un nouveau void L'ensemble Lancer une exception
10 La cible fictive est une méthode statique Autre que nul L'ensemble Renvoie la valeur de retour spécifiée
11 La cible fictive est une méthode statique Autre que nul L'ensemble Lancer une exception
12 La cible fictive est une méthode statique void L'ensemble Lancer une exception
13 La cible fictive est une méthode privée Autre que nul L'ensemble Renvoie la valeur de retour spécifiée
14 La cible fictive est une méthode privée Autre que nul L'ensemble Lancer une exception
15 La cible fictive est une méthode privée void L'ensemble Lancer une exception
16 La cible fictive est une méthode privée Autre que nul Seulement quelques méthodes Renvoie la valeur de retour spécifiée
17 La cible fictive est une méthode privée Autre que nul Seulement quelques méthodes Lancer une exception
18 La cible fictive est une méthode privée void Seulement quelques méthodes Lancer une exception

Classe créée pour les tests

DateUtil.java import java.text.SimpleDateFormat; import java.util.Date; public class DateUtil { private Boolean flag; public static String getCurrentDate() { Date d = new Date(); return new SimpleDateFormat("yyyy/MM/dd").format(d); } public static void setCurrentDate(long currentTime) { Date d = new Date(); d.setTime(currentTime); } public String getYYYYMMDDStringWrapper(Date date) throws Exception { return getYYYYMMDDString(date); } private String getYYYYMMDDString(Date date) throws Exception { return new SimpleDateFormat("yyyyMMdd").format(date); } private void setFlag(Boolean flag) throws Exception { this.flag = flag; } }

Comment rédiger un test

Comment écrire un test dans PowerMock

  1. Les méthodes utilisées dans Mockito, telles que mock / spy / doThrow, doivent être dédiées à PowerMock.
  2. Spécifiez PowerMockRunner avec @RunWith
  3. Spécifiez le test cible fictif avec @PrepareForTest

import static org.powermock.api.mockito.PowerMockito.doThrow; import static org.powermock.api.mockito.PowerMockito.mock; import static org.powermock.api.mockito.PowerMockito.spy; import static org.powermock.api.mockito.PowerMockito.whenNew;

@RunWith(PowerMockRunner.class) @PrepareForTest({ DateUtil.class }) public class PowerMockTest { ...

No.7 Rend whenNew renvoyer une maquette de l'objet créé par new.

/**

// Phase d'enregistrement Date dateMocked = mock(Date.class); whenNew(Date.class).withNoArguments().thenReturn(dateMocked); when(dateMocked.getTime()).thenReturn(expected.getTime());

// Phase de relecture String strDate = DateUtil.getCurrentDate();

// Phase de vérification assertThat(strDate, is("2015/05/05")); }

No.8 /**

// Phase de relecture et de vérification try { DateUtil.getCurrentDate(); fail(); } catch (RuntimeException e) { assertThat(e.getMessage(), is("aaa")); } }

No.9 /**

// Phase de relecture et de vérification try { DateUtil.setCurrentDate(123456789L); fail(); } catch (RuntimeException e) { assertThat(e.getMessage(), is("bbb")); } }

No.10 Mock méthodes statiques avec mockStatic.

/**

// Phase de relecture et de vérification assertThat(String.valueOf(true), is("false")); assertThat(String.valueOf(false), is("false")); }

No.11 /**

// Phase de relecture et de vérification try { String.valueOf(true); fail(); } catch (RuntimeException e) { assertThat(e.getMessage(), is("aaa")); } assertNull(String.valueOf(false)); }

No.12 /**

// Phase de relecture et de vérification try { DateUtil.setCurrentDate(12345L); fail(); } catch (RuntimeException e) { assertThat(e.getMessage(), is("bbb")); } }

No.13 Puisqu'elle se moquera du tout, la méthode moquée est appelée directement par réflexion.

/**

// Phase de relecture Method getYYYYMMDDStringMethod = DateUtil.class.getDeclaredMethod("getYYYYMMDDString", Date.class); getYYYYMMDDStringMethod.setAccessible(true); String actual = (String)getYYYYMMDDStringMethod.invoke(dateMocked, new Date());

// Phase de vérification assertThat(actual, is("12345678")); }

No.14 /**

// Phase de relecture et de vérification try { Method getYYYYMMDDStringMethod = DateUtil.class.getDeclaredMethod("getYYYYMMDDString", Date.class); getYYYYMMDDStringMethod.setAccessible(true); getYYYYMMDDStringMethod.invoke(dateMocked, new Date()); fail(); } catch (Exception e) { if (e instanceof InvocationTargetException) { InvocationTargetException ite = (InvocationTargetException) e; assertThat(ite.getTargetException().getMessage(), is("aaa")); } else { fail(); } } }

No.15 /**

// Phase de relecture et de vérification Method setFlagMethod = DateUtil.class.getDeclaredMethod("setFlag", Boolean.class); setFlagMethod.setAccessible(true); try { setFlagMethod.invoke(dateMocked, true); fail(); } catch (Exception e) { if (e instanceof InvocationTargetException) { InvocationTargetException ite = (InvocationTargetException) e; assertThat(ite.getTargetException().getMessage(), is("bbb")); } else { fail(); } } }

No.16 La seule différence dans la façon de se moquer est d'utiliser l'espion. Le reste est le même que le n ° 13-15. Il ne se moque pas de tout, vous pouvez donc le tester via des méthodes publiques. Bien sûr, la réflexion est également possible. /**

// Phase de relecture String strDate = dateMocked.getYYYYMMDDStringWrapper(new Date());

// Phase de vérification assertThat(strDate, is("12345678")); }

No.17 /**

// Phase de relecture et de vérification try { dateMocked.getYYYYMMDDStringWrapper(new Date()); fail(); } catch (RuntimeException e) { assertThat(e.getMessage(), is("aaa")); } }

No.18 /**

// Phase de relecture et de vérification Method setFlagMethod = DateUtil.class.getDeclaredMethod("setFlag", Boolean.class); setFlagMethod.setAccessible(true); try { setFlagMethod.invoke(dateMocked, true); fail(); } catch (Exception e) { if (e instanceof InvocationTargetException) { InvocationTargetException ite = (InvocationTargetException) e; assertThat(ite.getTargetException().getMessage(), is("bbb")); } else { fail(); } } }

référence

Mockito http://site.mockito.org/ PowerMock https://github.com/powermock/powermock

Projet confirmé au travail

https://github.com/taka2/mockito-sample

Comment se moquer de chaque cas avec Mockito 1x

https://qiita.com/taka_22/items/0c13aacf6ffbc2c77970

Recommended Posts

Comment se moquer de chaque cas avec PowerMock + Mockito1x
Comment se moquer de chaque cas avec Mockito 1x
Mock Enum avec PowerMock
Comment se moquer d'un appel de super méthode dans PowerMock
Méthodes statiques simulées avec PowerMock
Comment numéroter (nombre) avec html.erb
Mock le constructeur avec PowerMock
Comment mettre à jour avec activerecord-import
Comment démarrer avec Slim
Comment entourer n'importe quel caractère avec "~"
Comment utiliser mssql-tools avec Alpine
Comment démarrer Camunda avec Docker
Comment ajuster TextPosition avec l'extension de clavier iOS
Comment partager des fichiers avec Docker Toolbox
Comment compiler Java avec VsCode & Ant
[Java] Résumez comment comparer avec la méthode equals
[Android] Comment gérer les thèmes sombres
Comment utiliser BootStrap avec Play Framework
Comment changer d'images miniatures avec JavaScript
[Note] Comment démarrer avec Rspec
Comment faire un contrôle basé sur l'API avec cancancan
Comment réaliser le téléchargement de fichiers avec Feign
Comment mettre à jour les modèles associés avec accepte_nested_attributes_for
Comment définir JAVA_HOME avec l'appassembler-maven-plugin de Maven
Comment implémenter TextInputLayout avec la fonction de validation
Comment gérer les erreurs de connexion avec l'appareil
Comment supprimer des données avec une clé externe
Comment tester l'étendue privée avec JUnit
Comment surveiller nginx avec docker-compose avec datadog
Comment gérer les actifs de précompilation a échoué.
Comment réaliser le téléchargement de fichiers avec Feign
Comment exécuter Blazor (C #) avec Docker
Comment créer un environnement Rails 6 avec Docker
Comment télécharger Oracle JDK 8 rpm avec curl
[Java] Comment tester s'il est nul dans JUnit
Comment exécuter une méthode et simuler avec JUnit
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Comment enregistrer dans plusieurs tables avec une seule entrée
Comment tester les interruptions pendant Thread.sleep avec JUnit
Comment utiliser h2db intégré avec Spring Boot
Comment utiliser le framework Java avec AWS Lambda! ??
Comment créer plusieurs menus déroulants avec ActiveHash
Notes sur l'utilisation de chaque règle de JUnit
Comment utiliser l'API Java avec des expressions lambda
Comment démarrer avec Eclipse Micro Profile
Comment donner votre image à quelqu'un avec Docker
Comment tout insérer en même temps avec MyBatis
Comment écrire du code de test avec la certification de base
Comment créer une API avec GraphQL et Rails
Comment utiliser le protocole NFS version 2 avec Ubuntu 18.04
Comment sortir un fichier de ressources avec spring-boot
Comment créer des variables membres avec le modèle JPA
Comment vérifier les éléments variables avec RequestBodyMatching de WireMock