java.net.URL을 통해 웹 서비스를 호출하는 서블릿 클래스에 대한 단위 테스트를 작성하고 싶습니다.URL 호출을하는 서블릿 단위 테스트
mockHttpServletRequest, MockHttpServletResponse를 생성하고 doGet에 전달하여 모의 요청 및 응답 객체를 작성하여 서블릿의 doGet 메소드로 쉽게 보낼 수 있습니다 (junit의 실용적인 프로그래머 텍스트의 기술 사용).
문제가있는 부분은 서블릿에서 열린 URL입니다.
지금 당장은 URL을 열고 문자열 (프로덕션 코드)을 반환하는 함수를 호출하고이를 반환하는 함수를 호출하면 고정 된 URL에 대한 문자열이 직접 반환됩니다. 테스트 코드)
이상적으로는 테스트 코드가 보이지 않는 doGet 메소드가 필요합니다. 네트워크 액세스를 만드는 함수와 직접 문자열을 반환하는 함수 중 하나는 doGet에 투명해야합니다.
나는 이것을 달성하는 여러 가지 방법을 생각할 수 있지만, 아무렇지도 않게 느낀다.
예 1 : testOn 부울을 가지고있는 클래스의 기능 및 setTestMode 방법 랩; junit init은 testMode를 true로 설정할 수 있으며, 기본값은 false입니다. testOn은 호출 할 메소드를 결정합니다. 부정적인 것은 새로운 수업이 필요하다는 것입니다.
예 2 개의 클래스가 네트워크 접속 중 하나가 거짓 인 구현을 가지고; junit을 mock 클래스를 다시로드하고, 프로덕션 코드가 일반 클래스를로드하도록합니다 (또는 어떻게 든 mock 클래스에 프로덕션 클래스를 다시 매핑). 부정적 : 이것이 어떻게 행해질 지 확신하지 못한다. 서투른 것처럼 보인다.
예 3 : 내가 모의 객체를 사용하여 필드 값을 기준으로 서블릿의 URL 액세스를 조정하려는 경우 정적 필드가있는 클래스를 나타내는 있습니다. 부정 : 글로벌 변수와 같은 느낌.
예 4 : 만 URL로 전환 (그러나 java.net.URL의가 최종) 경우 생산 코드가 잘 작동 할 수 있도록, URL을 확장합니다.
나는 아침의 검색을 통해 옳은 대답을 찾을 수 없었으므로, 그래서 나는 집단적 지혜로 돌아 섰다.
감사합니다, 아드 난
추신 - 내가, 내가의 java.net.URL을 사용하지 않아도 작동 상당의 무엇이든을 언급해야한다.
감사합니다 tomasz 및 dave - 내 검색 과정에서 IoC에 대한 참조를 보았지만 연결할 수 없었습니다. 다시 돌아가서 다시 확인해 보겠습니다. 알고있는 고품질 자습서로의 링크를 환영합니다. – adnan
@ user453026 아마도 "제어 반전"또는 "종속성 삽입"플러스 "튜토리얼"을 검색하려고 할 것입니다 ... 대부분은 검색 할 때 프레임 워크에 따라 다릅니다. 대부분의 경우 기본 프레임 워크를 이해하지 못하더라도 기본을 시각화하는 데 도움이됩니다. –