>  기사  >  테스트 전에 System.out.println(in.readLine()) 문을 추가하면 Java 서버 테스트가 통과되지만, 테스트가 없으면 실패하는 이유는 무엇입니까?

테스트 전에 System.out.println(in.readLine()) 문을 추가하면 Java 서버 테스트가 통과되지만, 테스트가 없으면 실패하는 이유는 무엇입니까?

王林
王林앞으로
2024-02-22 13:34:06739검색

php 편집자 Yuzai의 답변: Java 서버 테스트에 System.out.println(in.readLine()) 문을 추가하면 테스트 결과에 영향을 줄 수 있습니다. 왜냐하면 이 문은 서버의 입력 스트림을 읽어서 서버가 데이터를 수신할 수 있기 때문입니다. 요구. 이 문이 없으면 서버가 요청을 올바르게 수신하지 못해 테스트가 실패할 수 있습니다. 따라서 테스트 전에 이 문장을 추가하는 것은 서버가 요청을 정상적으로 수신하고 테스트를 통과할 수 있는지 확인하는 것입니다.

질문내용

멀티플레이 지뢰찾기 게임을 처리하기 위해 자바로 서버를 구현하려고 합니다. 내 서버가 합법적인 클라이언트 요청에 올바르게 응답하는지 확인하기 위해 테스트하는 동안 특정 클라이언트 요청을 서버에 인쇄한 후 system.out.println(in.readline()) 문을 추가해야만 테스트 출력을 통과할 수 있다는 사실을 발견했습니다. stream 이지만 테스트 자체를 호출하기 전입니다.

예를 들어 클라이언트가 할 수 있는 요청 중 하나는 보드의 현재 상태를 보기 위한 "보기" 요청입니다. 저는 원래 다음과 같이 "look"에 대한 테스트를 작성했습니다:

으아악

그런데 이렇게 테스트를 실행하면 실패하고 [- - - - - - -]를 예상했지만 []이 발생했다는 오류 메시지가 나타납니다.

하지만 다음과 같은 인쇄문을 추가하면:

으아악

테스트를 통과했습니다. 왜 그런 상황이 있습니까? print 문은 클라이언트가 서버에서 입력을 읽을 수 있는 시간을 더 제공합니까, 아니면 다른 일이 진행되고 있습니까? 도움이 된다면 내 코드의 더 많은 조각을 제공해 드리겠습니다.

해결 방법

맹목적인 추측: 서버 응답이 예상치 못한 빈 줄로 시작됩니다.

system.out.println(in.readline());<code>println 部分实际上并不重要,只需使用 in.readline() 就会得到相同的结果,因为它“消耗”了来自服务器的第一行。这不是时间问题,因为 readline() 전체 행이 수신될 때까지 차단됩니다.

빈 줄을 보내는 모든 항목을 제거하거나 문제를 해결하기 위해 테스트를 수정하여 서버에서 이 문제를 해결할 수 있습니다.

으아악

위 내용은 테스트 전에 System.out.println(in.readLine()) 문을 추가하면 Java 서버 테스트가 통과되지만, 테스트가 없으면 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제