From d9e1841216ccdf17591bbf9757792124b214d36b Mon Sep 17 00:00:00 2001 From: trochas Date: Fri, 12 Dec 2025 09:00:43 +0100 Subject: [PATCH] mock --- .../istic/vv/TLSSocketFactoryTestMocks.java | 46 +++++++++++++++++++ exercises/mocks.md | 7 +++ 2 files changed, 53 insertions(+) diff --git a/code/tp3-ssl/src/test/java/fr/istic/vv/TLSSocketFactoryTestMocks.java b/code/tp3-ssl/src/test/java/fr/istic/vv/TLSSocketFactoryTestMocks.java index 281ff5a..e426bd2 100644 --- a/code/tp3-ssl/src/test/java/fr/istic/vv/TLSSocketFactoryTestMocks.java +++ b/code/tp3-ssl/src/test/java/fr/istic/vv/TLSSocketFactoryTestMocks.java @@ -1,6 +1,9 @@ package fr.istic.vv; import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; import java.util.ArrayList; import java.util.Arrays; @@ -8,8 +11,51 @@ import java.util.Collections; import java.util.List; import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + public class TLSSocketFactoryTestMocks { + @Test + public void preparedSocket_NullProtocols(){ + TLSSocketFactory f = new TLSSocketFactory(); + + SSLSocket socket = Mockito.mock(SSLSocket.class); + + + when(socket.getSupportedProtocols()).thenReturn(null); + when(socket.getEnabledProtocols()).thenReturn(null); + + f.prepareSocket(socket); + + verify(socket, never()).setEnabledProtocols(any()); + } + + @Test + public void typical() { + TLSSocketFactory f = new TLSSocketFactory(); + + SSLSocket socket = Mockito.mock(SSLSocket.class); + + when(socket.getSupportedProtocols()).thenReturn(shuffle(new String[]{"SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2"})); + when(socket.getEnabledProtocols()).thenReturn(new String[]{"SSLv3", "TLSv1"}); + + f.prepareSocket(socket); + + verify(socket).setEnabledProtocols( + eq(new String[] {"TLSv1.2", "TLSv1.1", "TLSv1", "SSLv3"}) + ); + } + + private String[] shuffle(String[] in) { + List list = new ArrayList(Arrays.asList(in)); + Collections.shuffle(list); + return list.toArray(new String[0]); + } + } \ No newline at end of file diff --git a/exercises/mocks.md b/exercises/mocks.md index 9020fa1..6b00b34 100644 --- a/exercises/mocks.md +++ b/exercises/mocks.md @@ -9,3 +9,10 @@ Rewrite these tests with the help of Mockito. The initial tests fail to completely test the `TLSSockeetFactory`. In fact, if we *entirely* remove the code inside the body of `prepareSocket` no test case fails. Propose a solution to this problem in your new Mockito-based test cases. + + + + +Aucun test n'échoue quand on supprime le contenu de prepareSocket() car les tests ne vérifient les conditions seulement si setEnabledProtocols se lance, or si prepareSocket() est vide setEnabledProtocols n'est jamais appelé, donc ni le fail(), ni le assertTrue() n'est exécuté. Le test passe donc. + +avec les Mock on utilise verify. Si setEnabledProtocols n'est jamais appelé alors c'est aussi une erreur \ No newline at end of file