2012-05-21 29 views
2

Java JAX-WS를 사용하여 서비스를 만드는 독립형 Java 응용 프로그램이 있습니다. 서비스를 테스트하기위한 테스트 케이스를 만들고 싶습니다. 어떻게해야합니까?JAX-WS unit tests

프로젝트 외부에서 외부 클라이언트를 사용하는 것이 최선의 방법이라고 생각하십니까?

+4

* [tag : jax-ws]? * –

답변

3

통합 대 유닛 테스트에 대한 논쟁은 계속 될 수 있습니다. 웹 서비스 계층을 제거하고 내부 비즈니스 로직을 테스트하는 것만으로 통합 테스트를 단위 테스트로 변경하지 않습니다.

IMHO 웹 서비스는 애플리케이션의 공개 API이며 앱 버전간에 일관되게 작업해야합니다. 따라서 광범위 한 soapUI 테스트 슈트를 추천 할 것입니다. 여러분의 앱과 db를 일반 클라이언트처럼 치는 것입니다. 어설 션을 추가하여 예상 성공 및 실패 메시지를 확인할 수 있습니다 (잘못된 데이터가 던져지면 웹 서비스가하는 것을 테스트하는 것을 잊지 마십시오). 또한 그루비 어설 션을 추가하여 각 웹 서비스 호출 후에 데이터베이스 상태를 확인할 수 있습니다.

위의 내용을 보완하기 위해 빠른 실행 단위 테스트를 적극 권장하지만 야간 빌드에 대해 매일 밤 강력한 통합 제품군을 실행하면 API의 품질을 보장하고 그렇지 않은 경우에만 플러시되는 많은 문제를 피할 수 있습니다. 앱이 배포되면 고객이 서비스를 시작합니다.

웹 서비스의 특성상 UI가 없기 때문에 인간 테스트자가 남겨두면 잘 테스트되지 않습니다.

+0

이것은 내가 묻는 것입니다. 단위 테스트가 아니라 서비스가 작동하는지 확인하는 무언가를 만들고 싶습니다. – nycynik

+0

예. 당신이 단위 테스트에 의지 할 수 있다고 생각하지 않습니다. 웹 서비스는 요소가 누락되거나, 요소가 "xsi : nil"로 표시되며, 유효하지 않은 데이터 (int 일 때 문자열 데이터 등)가 포함 된 요소와 같은 자체적 인 문제가 있습니다. 웹 서비스 테스트를 위해 soapUI를 충분히 추천하지 못했습니다. – davidfrancis

+0

관심있는 사람들을위한 링크. http://www.soapui.org/Working-with-soapUI/getting-started.html – nycynik

1

실제 웹 서비스 엔드 포인트 또는 클라이언트를 테스트 할 것이라고는 생각하지 않습니다. 모든 비즈니스 로직을 일부 서비스 계층으로 이동 한 다음 해당 객체를 단위 테스트합니다. 예 :

@Path("/user") 
public class UserWebService { 

    @Inject 
    private UserService userService; 

    @Path("/delete") 
    public void deleteUser(@RequestParam long id) { 
     userService.deleteUser(id); 
    } 

} 

그러면 UserService 구현을 테스트 할 것입니다.

5

엄밀히 말하면 웹 서비스를 배포하고 테스트하는 것은 단위 테스트가 아닌 통합 테스트입니다. 그렇게 말하면 아마도 이것을 단위 테스트하는 것이 좋습니다. 비즈니스 로직을 구현하는 별도의 레이어를 만들고 웹 서비스로 노출하는 다른 레이어를 만들 것입니다. 그런 다음 웹 서비스에 대해 걱정할 필요없이 비즈니스 논리를 테스트 할 수 있습니다.

결국 웹 서비스를 시작하기 위해 사용하고있는 웹 프레임 워크를 다시 테스트하고 싶지는 않을 것입니다. 비즈니스 로직을 테스트하고 싶습니다. 그러면 더 빠르고 부서지기 쉬운 테스트를 만들 수 있습니다.