[java] JUnit으로 소켓 프로그래밍 테스트하기

소켓 프로그래밍은 네트워크 통신을 위해 사용되는 중요한 개념입니다. 소켓 프로그래밍을 테스트하기 위해서는 실제 네트워크 연결이 필요하지만, 이는 테스트에 불편을 초래할 수 있습니다. 다행히도 JUnit을 사용하여 소켓 프로그래밍을 테스트할 수 있습니다.

1. 소켓 프로그래밍 테스트를 위한 JUnit 설정

소켓 프로그래밍을 테스트하기 위해 JUnit을 설정해야 합니다. 먼저, 프로젝트의 의존성으로 JUnit을 추가해야 합니다. Maven을 사용한다면 다음과 같이 pom.xml 파일에 JUnit 의존성을 추가합니다:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
</dependency>

Gradle을 사용한다면 다음과 같이 build.gradle 파일에 JUnit 의존성을 추가합니다:

testImplementation 'junit:junit:4.13.2'

2. 소켓 프로그래밍 테스트 작성하기

이제 실제 소켓 프로그래밍 테스트를 작성해보겠습니다. 예를 들어, 간단한 클라이언트와 서버 간의 통신을 테스트하려고 합니다.

클라이언트 테스트 작성하기

먼저, 클라이언트 테스트를 작성해보겠습니다. 다음은 클라이언트가 서버로 메시지를 보내고 서버로부터 응답을 받는 테스트입니다:

import org.junit.Test;
import java.io.*;
import java.net.Socket;

public class ClientTest {

    @Test
    public void testSendMessageToServer() throws IOException {
        String serverHostName = "localhost";
        int serverPort = 8080;
        String message = "Hello, Server!";
        
        try (Socket socket = new Socket(serverHostName, serverPort);
             PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
             
            out.println(message);
            String response = in.readLine();
            // Assertion for response validation
        }
    }
}

위의 예제에서는 localhost와 포트 8080으로 서버에 접속하여 메시지를 보내고 응답을 받는 테스트를 수행합니다. 이후, 받은 응답을 검증하기 위해 Assertion을 추가할 수 있습니다.

서버 테스트 작성하기

이제 서버 테스트를 작성해보겠습니다. 다음은 서버가 클라이언트로부터 메시지를 받고 응답을 보내는 테스트입니다:

import org.junit.Test;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerTest {

    @Test
    public void testReceiveMessageFromClient() throws IOException {
        int serverPort = 8080;

        try (ServerSocket serverSocket = new ServerSocket(serverPort);
             Socket clientSocket = serverSocket.accept();
             PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
             BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))) {

            String message = in.readLine();
            // Assertion for message validation
            
            out.println("Hello, Client!");
        }
    }
}

위의 예제에서는 포트 8080에서 클라이언트로부터 메시지를 받고, 받은 메시지를 검증한 후 응답으로 “Hello, Client!”를 보냅니다.

3. 소켓 프로그래밍 테스트 실행하기

테스트를 실행하기 위해서는 JUnit을 실행하면 됩니다. 대부분의 통합 개발 환경(IDE)은 JUnit 테스트를 쉽게 수행할 수 있는 기능을 제공합니다. IDE를 사용하는 경우, 단축키인 Ctrl + Shift + F10을 눌러 JUnit 테스트를 실행하세요.

또는 터미널을 사용하여 다음 명령어로 테스트를 실행할 수도 있습니다:

mvn test

또는

gradle test

4. 결론

이제 JUnit을 사용하여 소켓 프로그래밍을 테스트하는 방법을 알게 되었습니다. JUnit을 사용하면 실제 네트워크 환경에 의존하지 않고도 소켓 프로그래밍을 테스트할 수 있어 편리합니다. 확인 및 검증되지 않은 코드를 수정할 때 테스트를 자주 실행하면서 안정성을 확보할 수 있습니다.

참고 자료