2010-03-08 3 views
2

저는 현재 통합 테스트를 수행하고 있습니다. WCF 서비스가 호출되면 기대 한대로 작동하는지 확인하고 싶습니다.테스트를 위해 복잡한 상황을 어떻게 설정해야합니까?

매우 간단한 시나리오를 생각해 봅시다. 우리가 보류 또는 보류 해제 할 수있는 계약 객체가 있다고 가정합니다. 이제 보류 대기 시험을 쓰는 것은 아주 간단합니다. 계약 인스턴스를 만들고 코드에 코드를 실행합니다.

내가 가지고있는 질문은 우리가 이륙 대기 서비스를 시험하고 싶을 때입니다. 문제는 계약을 보류하는 것이 실제로는 상당히 복잡하여 다양한 객체가 모두 수정된다는 것입니다. 그래서 보통 빌더 패턴을 사용하여 다음과 같은 작업을 수행합니다.

var onHoldContract = new ContractBuilder(). PutOnHold(). Build();

내가 가진 문제점은 이제 내 보류 서비스의 상당 부분을 복제해야한다는 것입니다. 이제 보류 상태에서 무언가를 두는 것을 바꾸면 수정할 필요가있는 두 곳이 있습니다.

나를 즉시 뛰어 내리는 다른 옵션은 테스트 설정의 일부로 대기 서비스를 사용하는 것입니다.하지만 이제는 테스트를 다른 코드 조각의 성공으로 연결합니다. 다른 곳에서 관련없는 테스트를 중단하는 한 곳에서 실패 할 수 있기 때문에 (예 : 실패한 경우).

다른 옵션 여기를 놓치지 마세요. 또는 방법이 선호되는 이유 및 그 이유는 무엇입니까?

+0

처음에 내가 INTEGRATION Testing을하고 있다고 언급했습니다. 모의는이 모든 경우에 어떻게 통합되는지보고 싶기 때문에 좋은 생각이 아닙니다. –

답변

1

모의 프레임 워크는 단위 테스트를위한 좋은 옵션입니다. 하지만 당신이 실제로이 단계에서 통합을하고 있다는 것을 이해 했는가? 따라서 WCF 서비스를 블랙 박스 (클라이언트 관점에서 볼 때)라고 부릅니다. On Hold 작업을 수행 할 때 저장소 (데이터베이스, XML 파일 등)에서 일부 지속성을 수행해야한다고 가정합니다.

오프 홀드 작업을 테스트하기 위해 리포지토리 항목 등을 포함하여 적절한 상태의 대기 개체가 필요하기 때문에이 경우 테스트 측면에서만 모의 프레임 워크가 도움이되지 않습니다. 휠을 재발견 할 필요없이이 작업을 수행 할 수있는 유일한 방법은 먼저 서비스를 대기 상태로 두는 것입니다. 하지만 당신이 감탄한다면, 환경을 설정해야합니다. 이것은 코드 중복을 의미합니다 (실제로 일부 통합 테스트 시나리오에서이 작업을 수행해야합니다. 테스트 시작시이를 설정하는 것이 었습니다. 운영).

단위 테스트는 서비스 자체의 구현에서 더 낮을 것이며 가능한 한 그것을 분리해야합니다. 여기가 모의 프레임 워크를 적용 할 곳입니다.

이 정보가 도움이되기를 바랍니다.

+0

적어도 당신은 내 질문을 읽을;) 그래, 난 다른 옵션 중 하나를 생각해 낼 수 없어 그것은 단지 발생하기 쉬운 상태로 만드는 코드를 사용하는 것이 다른 곳에서 작업을 복제하는 것이 훨씬 쉽습니다. –

-1

mocking framework을 사용해보세요.

조롱 프레임 워크를 사용하면 실제 객체를 대신하여 테스트에 사용될 때 특정 방식으로 응답 할 수있는 "모의 (mock)"객체를 만들 수 있습니다. 이렇게하면 인공적인 "보류"계약 객체를 직접 생성 한 다음이를 "테이크 오프 보류"서비스로 전달할 수 있습니다. 유효성을 검사 할 수있는 모의 (Mock) 특정 동작을 정의하여 보류 상태에서 올바르게 작동하도록 정의합니다.

귀하의 언어는 언급하지 않았지만 주요 언어는 모두 조롱 프레임 워크를 사용할 수 있습니다. .net의 경우, 의 예가 NMock입니다. Java의 경우 인기있는 것은 Mockito입니다. 사용하는 언어에 관계없이 Google을 사용하면로드가 더 많이 발생합니다.

+0

제가 언급 한 것처럼 통합 테스트를 통해 무언가를 조롱 거리로 만듭니다. –

+0

그냥 통합 테스트가 모의 객체를 사용할 수 없다는 것을 의미하지 않기 때문입니다. WCF 서비스 호출이 그 아래에있는 계층과 통합되어 있는지 테스트해야합니다 (n 계층 아키텍처라고 가정). 나는 당신이 진정한 단위 테스트에서와 같이 계층 경계를 조롱해야한다는 것을 말하는 것이 아니라 비즈니스 객체입니다. 이것이 원하는 것이 아니라면 다른 옵션이 없습니다. 다른 서비스 호출을 사용하여 객체 설정을 얻는 비슷한 테스트 설정이 있습니다. 관련없는 오류 문제를 받아 들여야합니다. 통합 테스트의 본질은 어쨌든 전체 시스템을 테스트 할 것을 제안합니다. –

+0

귀하의 마지막 코멘트는 내가 찾는 주장의 종류입니다. –

관련 문제