[英]Executing multiple unit tests that use Java socket
我有兩個使用套接字的單元測試。 問題是,當我在eclipse中執行它們時,在第二個客戶端/服務器測試中我總是遇到連接被拒絕的錯誤。 第一個單元測試使用端口9091,第二個使用端口9092。
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
快速的解決方案是在第二個單元測試開始時添加Thread.sleep(500)
。 它通常有效,但並非總是如此。
這個錯誤有什么問題? 如何安全地執行使用套接字的多個單元測試?
@Test(timeout = 2000)
public void testBareTest9092() {
PingerThread pinger = new PingerThread();
pinger.start();
String serverAddress = "localhost";
String testString = "ABCDEF-Hellowrolds";
try {
Socket s = new Socket(serverAddress, 9092);
PrintWriter output = new PrintWriter(s.getOutputStream(), true);
output.println(testString);
BufferedReader input = new BufferedReader(new InputStreamReader(
s.getInputStream()));
String answer = input.readLine();
System.out.println(answer);
System.out.println(testString);
assertTrue(answer.equals(testString));
s.close();
input.close();
output.close();
} catch (UnknownHostException e) {
e.printStackTrace();
fail("ERROR!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
fail("ERROR!");
}
pinger.cancel();
}
public class PingerThread extends Thread {
public int id;
@Override
public void run() {
try {
ServerSocket listener = new ServerSocket(9092);
long startTime = System.nanoTime();
while (!Thread.currentThread().isInterrupted()) {
try {
while (true) {
Socket socket = listener.accept();
try {
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
String input = in.readLine();
System.out.println("Received:" + input);
PrintWriter out = new PrintWriter(
socket.getOutputStream(), true);
out.println(input);
} finally {
socket.close();
listener.close();
}
}
} finally {
}
}
} catch (Exception consumed) {
}
}
public void cancel() {
interrupt();
}
}
僅在發生錯誤時重試似乎可以解決此問題。
Socket s;
try {
s = new Socket(serverAddress, 9092);
}
catch (IOException e)
{
// when error, try again after some delay
Thread.sleep(500);
s = new Socket(serverAddress, 9092);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.