Quelqu'un peut-il faire un test Junit sur cette classe?
3 Réponses :
Votre titre fait clairement le problème: vous n'injectant pas la dépendance sur qui ressemblerait à: p> eMaNervice code>. Pour ce faire, ajoutez un setter ou (mieux) le rendre
final code> et l'ajouter au constructeur.
private MyApplication app;
private EmailService email;
@BeforeEach
void setup() {
email = mock(EmailService.class);
when(email.sendEmail(any(), any())).thenReturn(true);
app = new MyApplication(email);
}
@Test
void testProcessZeroLengthMessageOrPerson() {
assertFalse(app.processMessages("", "Person"));
assertFalse(app.processMessages("Message", "")):
assertFalse(app.processMessages("", "")):
}
@Test
void testProcessMessage() {
assertTrue(app.processMessage("Message", "Person"));
verify(email).sendEmail("Message", "Person");
}
J'ai effectué des tests pour le service de messagerie à l'aide du courrier vert GITUB P> p>
Bienvenue dans le débordement de pile. Les votes en panne sont probablement parce que cela semble être une réponse "Link seulement" en ce sens qu'elle ne contient pas la réponse et s'appuie sur une personne qui suit le (s) lien (s). Veuillez lire sur répondre aux questions .
La solution évidente serait de utiliser à la place une injection de dépendance. Vous connaissez déjà le terme, alors je suppose que vous êtes assez ingénieux pour trouver les informations nécessaires pour appliquer une injection de dépendance à la classe à portée de main (il y a des informations sur Internet - Wikipedia, YouTube, ce site et beaucoup plus ..).
Toutefois, étant donné un scénario dans lequel vous souhaitez tester cette classe et ne sont pas disposés ou incapables de changer de code source et de corriger la violation, alors si S'ils sont finaux, nous pouvons faire un nouveau chargeur de classe qui sera remplacé Bien que ces techniques permettent de tester des cours d'incrimination, ils font des tests qui sont difficiles à comprendre et à entretenir. Je réfléchirais à deux fois avant d'ajouter un test comme l'un des éléments ci-dessus dans ma suite de tests et envisagerons la possibilité de refactoriser ou de remplacer la classe sous test bien avant cela. P> P> e-mailservice code> et
eMaNervice # Sendemail code> ne sont pas finaux, vous pouvez utiliser la réflexion: p>
emailervice code> avec notre propre classe (peut-être un jour, je vais éditerai cette réponse et fournir un exemple de ceci). P>