2017-12-13 11 views
1

시나리오 : -는 JUnit 테스트의 URL을 통해 스텁 파일을 제공 - wiremock 우리가

우리는있는 JUnit 테스트하기 (자바) 모듈이있다. 모듈은 기본적으로 파일을 입력으로 처리하고 처리 한 다음 데이터를 Hazelcast에 씁니다. 이러한 입력 파일은 내부 URL에서 다운로드됩니다.

Junit 테스트 (완전히 별도의 테스트 프로젝트, 즉 junit 테스트는 테스트 할 mudule에 포함되어 있지 않음)에서 이 파일이있는 URL에 액세스 할 수 없습니다.

문제점 : -

는 -> 모듈에 입력 파일을 제공하기 위해, .properties 파일은 물리적 위치 wehre하는 것이 지정되어 사용된다. 모듈 자체의 InputFileUrl 필드입니다.

-> 모듈의 어느 곳에서나이 URL은 .properties 파일에서 읽히고 추가 매개 변수가 추가됩니다. 모듈은 이것을 Url이라고 부르려고 시도하고 입력 파일을 다운로드합니다. 테스트 프로젝트에서이 URL에 액세스 할 필요가 없습니다. 그래서 우리는 파일의 정적 주소를 다음과 같이 이러한 입력 파일을 제공합니다

InputFileUrl = file:///C:/Inputs/file.xml 

- 몇 가지 추가 매개 변수가 모듈에 위의 URL에 추가 할 때> 문제는,이다, 자연적으로는 unvalid URL이되고 예외가 발생합니다. 이러한 추가 매개 변수가 추가 된 모듈 주석 부분을 만들면 테스트 프로젝트에서 성공적으로 모듈을 실행할 수 있습니다. (단 한 줄의 통신망)

그래서 1) 어떻게 모듈 코드를 변경하지 않고이 URL 액세스 문제를 해결할 수 있습니까?

여기에서 WireMock 기술을 유용하게 사용할 수 있습니까? 나는이 글을 읽었을 때 내부 URL이 테스트 대상 모듈에 대한 조롱을받은 이후에이 시나리오를 유용하게 사용할 수 있을지 모르겠다.

답변

0

예, Wiremock을 사용하면 모듈에 제공하려는 xml로 응답하는 스텁 서버를 설정할 수 있습니다. 당신이 고정 IP/도메인 이름과 wiremock 독립을 실행할 수 있지만 그래서 테스트를 위해 사용자가 설정 할

InputFileUrl = http://<wiremockurl> 

wiremockurl은 "localhost"를 일반적입니다.

는 스텁은이 같은 작품 : 당신이 wiremock documentation에서 읽을 수 있듯이

stubFor(get(urlEqualTo("/api/specific-resource")) 
    .willReturn(aResponse() 
     .withBody("<xml1>..<xml1>"))); 

, 당신은 많은 추가 쿼리 매개 변수 또는 설정 특정 추가 쿼리 매개 변수에 대한 특정 응답에 대해 동일한 응답을 반환 할 수 있습니다.

// responds with same response regardless of query params 
.urlEqualTo("/myurl\?.*") 

// responds with special xml if additional query param "search_term" is present and matches given regex 
.withQueryParam("search_term", matches("^(.*)wiremock([A-Za-z]+)$")) 

모듈이 여분의 URL 매개 변수를 추가 할 경우 동일한 또는 다른 속성으로 응답하도록 wiremock을 설정할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 모듈 자체에서 추가 매개 변수가 URL에 추가 될 때 어떤 일이 발생하는지 궁금합니다. 예를 들어 Module의 메소드를 의미합니다. getInputFileUrl()은 내 조롱 된 URL을 반환하고 메소드는 모듈에있는 메소드 코드에 따라 광고에 추가 매개 변수를 시도합니다. 테스트에서 어떻게 제어/피할 수 있습니까? getInputFileUrl은 내 테스트에서 명시 적으로 호출되지 않지만 어딘가에 내부적으로 호출됩니다 ... – Ragini

+0

세부 정보를 더했습니다. – tkruse