Comment se moquer de chaque cas avec Mockito 1x https://qiita.com/taka_22/items/0c13aacf6ffbc2c77970 A continué.
Mockito 1.10.19 PowerMock 1.7.3 JUnit 4.11 Java 1.8.0_151
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 |
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; } }
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(); } } }
Mockito http://site.mockito.org/ PowerMock https://github.com/powermock/powermock
https://github.com/taka2/mockito-sample
https://qiita.com/taka_22/items/0c13aacf6ffbc2c77970
Recommended Posts