ソケット クライアントであるクラスがあり、そのメソッドを単体テストしようとしています。テストでは、各テストの前にソケット サーバーを起動する必要があるため、以下を使用します。
@Before
public void setUp() {
if (myServerSocket == null) {
Thread myThread = new Thread() {
public void run() {
DataInputStream dis = null;
DataOutputStream dos = null;
try {
ServerSocket myServer = new ServerSocket(port);
myServerSocket = myServer.accept();
dis = new DataInputStream(myServerSocket.getInputStream());
dos = new DataOutputStream(myServerSocket.getOutputStream());
byte[] bytes = new byte[10];
dis.read(bytes);
boolean breakLoop = false;
do {
if (new String(bytes).length() != 0) {
dos.writeBytes(serverMessage + "\n");
dos.flush();
breakLoop = true;
dos.writeBytes("</BroadsoftDocument>" + "\n");
dos.flush();
}
} while (!breakLoop);
}
catch (IOException e) {
e.printStackTrace();
}
}
};
myThread.start();
}
}
各テストの後、次のテストのためにサーバー ソケットを再度開くことができるように、サーバー ソケットを閉じようとします。
@After
public void tearDown() throws IOException, BroadsoftSocketException {
System.out.println("@After");
if (myServerSocket != null) {
myServerSocket.close();
myServerSocket = null;
try {
Thread.sleep(5000);
}
catch (InterruptedException e) {
// do nothing.
}
}
}
ただし、2番目のテストから始まる各テストの前に、「java.net.BindException: Address already in use: JVM_Bind」が発生します。各テストで同じポートを使用しようとしていることに気付きましたが、ソケットを閉じてポートを解放するべきではありませんか?