2013-06-26 2 views
2

Java 통합 테스트에서 느린 HTTP 연결을 시뮬레이션 할 수 있으므로 서버가 연결을 확인할 때까지 기다려야하는 시간을 정의 할 수 있습니까? JAX-WS 웹 서비스도 지원하는 솔루션이 완벽 할 것입니다.Java 통합 테스트를 위해 느린 HTTP 연결을 시뮬레이트 하시겠습니까?

배경 : 나는 통합 테스트에 중앙 타임 아웃 컨 피규 있습니다. 컨 피규 레이터 자체는 기술 독립적이어야합니다. 처음에는 JAX-WS 웹 서비스를 지원하므로 com.sun.xml.ws.connect.timeout 속성이 요청 컨텍스트로 설정됩니다.

(I는 JAX-WS의 일부임을, 그들을 설득하려고합니다 때문에 우리는 그것을 테스트 할 필요는 없지만,이 질문에 내 백업 계획입니다.)

PS를 :있다 일반적으로 느린 연결을 시뮬레이션하는 것에 대해 묻는 다른 질문입니다. 이것은 단위 테스트에서 외부 도구를 사용할 수 없어 특정 연결 시간을 정의 할 수 있어야하기 때문에 다릅니다.

+0

EasyMock을 사용하는 것이 좋습니다. 이름에서 알 수 있듯이 쉽지는 않지만 http 연결 및 데이터베이스와 같은 테스트를 훨씬 쉽게 만듭니다. – JREN

+0

@JREN : EasyMock을 알고 있지만 어떻게 저속 연결을 시뮬레이션 할 수 있습니까? 연결은 JAX-WS에 의해 만들어 지므로 모의 삽입은 어렵습니다. 그렇지 않습니까? –

+0

우리가 일반적으로하는 일은 System.currentTimeMillis()를 반환하는 currentMillis라는 보호 된 메서드를 생성하여 테스트 클래스에서 필드 변수를 반환하여 무시할 수 있도록하지만 시간을 추가하는 것만 큼 시간 스킵을 시뮬레이션합니다. 변수에. – JREN

답변

1

내 단위 테스트 중 하나에서 순수 Java 인 NanoHTTPd https://github.com/NanoHttpd/nanohttpd을 사용했습니다. 단 하나의 클래스입니다.

+0

좋아요! 나는 NanoHTTPD # start()를 수정하여 ServerSocket을 생성하기위한 커스텀 메소드를 호출 한 다음 ServerSocket # accept()를 슈퍼 구현을 호출하기 전에 주어진 시간 동안 sleep하도록 겹쳐 썼습니다. –

0

응용 프로그램에 포함될 수있는 프록시 (http 또는 양말)를 사용할 수 있습니다. 그런 다음 테스트 할 동작을 제공하도록 프록시에 지시 할 수 있습니다.

내가 놓친 TCP/IP 연결 (How to reproduce a silently dropped TCP/IP connection?)을 테스트하고 Java로 작성된 SOCKS 프록시를 통과해야만했습니다. 자바에서 작성된 프록시는 방금 찾고 있던 동작을 에뮬레이트하기 위해 일시 ​​중단했습니다.

+0

예, 프록시는 괜찮지 만 어떻게 구현합니까? 필자는 서블릿 프로그래밍에만 익숙하고 서블릿은 연결 자체를 처리하지 않습니다. –

+0

이 시점에서 수석 개발자를 데려 오는 것이 좋습니다. –

+2

"이 시점에서 수석 개발자를 초대하는 것이 좋습니다." SO에 대한 모든 질문에 추가 될 수 있습니다. 별로 도움이되지 않습니다. –

관련 문제