Index général
- Outils
- Références
- Tuyaux
This is an old revision of the document!
Ce TD vise
Si vous dépassez le temps passez à la suite et revenez dessus plus tard. L'énoncé suivant est issu du “getting started” de easyMock mis à jour pour travailler avec junit 5 et voir un peu plus de choses.
public interface Collaborator { // if the document already exists, a "AlreadyAdded" exception is thrown. // if the document fails to be added, false is return. public boolean documentAdded(String title) throws AlreadyAdded ; public void documentRemoved(String title) ; }
Et l'exception associée :
public class AlreadyAdded extends Exception { }
public class ClassTested { public static final String COPY = "_copy"; private Collaborator listener; private HashMap<String, String> documents = new HashMap<>(); public void setListener(Collaborator listener) { this.listener = listener; } public void addDocument(String title, String document) { try { if (listener.documentAdded(title) ) documents.put(title, document); } catch (AlreadyAdded e) { documents.put(title+COPY, document); } } public void removeDocument(String title) { listener.documentRemoved(title); } public Collaborator getListener() { return listener; } public boolean isContained(String key) { return documents.containsKey(key); } }
import static org.easymock.EasyMock.*; import static org.junit.Assert.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import org.easymock.EasyMockSupport; import org.easymock.Mock; import org.easymock.TestSubject; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class ExampleTest extends EasyMockSupport { @TestSubject private ClassTested classUnderTest = new ClassTested(); // 2 @Mock private Collaborator mock; // 1 @BeforeEach public void setUp() { //5.a mock = mock(Collaborator.class); classUnderTest = new ClassTested(); classUnderTest.setListener(mock); }
@Test public void testRemoveNonExistingDocument() { // This call should not lead to any notification // of the Mock Object replay(mock); // 6.b classUnderTest.removeDocument("Does not exist"); }
java.lang.AssertionError: Unexpected method call Collaborator.documentRemoved("Does not exist"):...
@Test public void testRemoveNonExistingDocument2() { mock.documentRemoved("Does not exist"); //7.a replay(mock); //7.b classUnderTest.removeDocument("Does not exist"); //7.c verify(mock); //7.d }
@Test public void testAddDocument() throws AlreadyAdded { //Initialisation Collaborator firstCollaborator = mock(Collaborator.class);//construction de mock Collaborator secondCollaborator = mock(Collaborator.class);//construction de mock, il ne sera pas utilisé classUnderTest.setListener(firstCollaborator); //// expect document addition expect(firstCollaborator.documentAdded("New Document")).andReturn(true); //On attend que le mock réponde True ! replayAll(); //on enregistre le comportement de tous les Mocks classUnderTest.addDocument("New Document", "content"); assertTrue(classUnderTest.isContained("New Document")); //on vérifie que NOS codes se comportent correctement verifyAll(); //On vérifie le comportement de tous les mocks }
@Test public void testFailingAddDocument() throws AlreadyAdded { //Initialisation Collaborator firstCollaborator = mock(Collaborator.class); Collaborator secondCollaborator = mock(Collaborator.class); classUnderTest.setListener(firstCollaborator); //// expect document addition expect(firstCollaborator.documentAdded("New Document")).andReturn(false); replayAll(); classUnderTest.addDocument("New Document", "content"); assertFalse(classUnderTest.isContained("New Document")); verifyAll(); }
@Test public void testDuplicationWhenAddingDocument() throws AlreadyAdded { //Initialisation Collaborator firstCollaborator = mock(Collaborator.class); Collaborator secondCollaborator = mock(Collaborator.class); classUnderTest.setListener(firstCollaborator); //// expect document addition expect(firstCollaborator.documentAdded("New Document")).andThrow(new AlreadyAdded()); replayAll(); classUnderTest.addDocument("New Document", "content"); assertTrue(classUnderTest.isContained("New Document"+ClassTested.COPY)); verifyAll(); }
Cela conclut la partie tutorielle. A présent, vous devriez savoir créer vous même des tests d'intégration.
Vous devez réaliser en groupe de X étudiants un jeu de quizz dont voici la spécification.
Un groupe a proposé l'an dernier les interfaces suivantes.
Voici un code pour tester un jeu.
Game
sans développer la classe Quiz
.Game
en utilisant des Mocks.Quizz
sans développer la classe Question
.Quizz
en utilisant des MocksPour Interroger vous pouvez utiliser:
import javax.swing.JOptionPane; .... String m = JOptionPane.showInputDialog("Anyone there?"); System.out.println(m); // juste pour expliquer ici JOptionPane.showMessageDialog(null, "A oui, il y a quelqu'un");
Rendus au plus tard le lundi 19 novembre à 18h45 sous http://jalon.unice.fr/cours/blay/Cours-blay-20150930110548/BoiteDepot-blay-20181113101132476393?mode_etudiant=true&tab=deposit
Voici le document qui sera utilisé pour l'évaluation (il peut encore changer) : https://goo.gl/forms/PmNPOPcurIKJLlo32