Bonjour,

Je code une application Java sous Netbeans qui se connecte à un serveur par java.net.Socket. J'essaye de tester la classe de connexion ComLAN.java (grâce à JUnit).
Par exemple, j'ai une méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
public void close() throws IOException {
		is.close();
		os.close();
		comSocket.close();
	}
Et j'ai donc généré dans ComLANTest.java la méthode de test unitaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
@Test
	public void testClose() throws Exception {
		instance = new ComLAN("127.0.0.1", 3000, 1000);
		System.out.println("close");
		instance.close();
		assertTrue(!instance.isConnected());
	}
J'ai bien sûr plusieurs autres méthodes dans cette classe.

Pour que la socket puisse se créer, j'ai simulé un serveur en local qui écoute sur le port 3000 (2eme paramètre du constructeur ComLAN) et que je lance avant de lancer mes tests :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
ServerSocket ss = new ServerSocket(3000);
Socket soc = ss.accept();
BufferedReader plec = new BufferedReader(
                               new InputStreamReader(soc.getInputStream())
                              );
 
        PrintWriter pred = new PrintWriter(
                             new BufferedWriter(
                                new OutputStreamWriter(soc.getOutputStream())),
                             true);
C'est ici que ça bloque.
Si je continue avec quelque chose comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
while(true){
	String str = plec.readLine();
	if (str.equals("END")) break; //exemple de réaction attendue par le protocole
}
, dans les méthodes qui n'écrivent rien j'obtiens un NullPointerException, c'est-à-dire que dès que j'ouvre la connexion, le serveur essaye de lire...?!
Si au contraire je fais de l'attente active (while(true){}), c'est lorsque j'ai une méthode qui tente d'écrire puis lire la réponse sur le stream que j'obtiens un NoSuchElementException (là c'est compréhensible).

J'aimerais donc simplement que mon serveur lise de façon bloquante pour ne pas être obligé de modifier son comportement pour chaque méthode testée.
J'ai essayé avec un Scanner mais même résultat. Lire directement dans le stream avec InputStream::read() ne me semble pas non plus approprié.

Je ne sais pas si je suis très clair, n'hésitez pas à me le dire.
Merci.

PS : En réalité, le constructeur de ComLAN et la fermeture de l'instance sont dans les @Before et @After de Junit, j'ai simplifié.