2017-01-24 1 views
0

소비자 측 계약을 확인할 때 시나리오 (일명 상태)를 사용하려고합니다. 나는 "newScenarioState"필드는 다음과 같이 추가 된 것을 볼 수 wiremock의 JSON 파일의 결과봄 구름 계약 설정 상태

my_contracts_dir\ 
    scenario1\ 
     1_login.groovy 
     2_showCart.groovy 
     3_logout.groovy 

:이 문서에서 말했다처럼 시나리오는 그루비 스크립트에 대한 번호 접두사를 사용하여 봄 구름 계약에 정의되어

{ 
 
    "uuid" : "34a829d1-adf4-41e4-b7d9-6ee66d7de8bc", 
 
    "request" : { 
 
    "url" : "/foo/demo", 
 
    "method" : "GET" 
 
    }, 
 
    "response" : { 
 
    "status" : 200, 
 
    "body" : "[{\"model\":{\"address\":\"Address\",\"name\":\"String\"}}]", 
 
    "headers" : { 
 
     "Content-Type" : "application/json" 
 
    } 
 
    }, 
 
    "scenarioName" : "Scenario_contracts", 
 
    "requiredScenarioState" : "Step2", 
 
    "newScenarioState" : "Step3" 
 
}

이 문제 는 어떻게 소비자 통합 테스트를 작성할 때이 상태 사용할 수 있습니까? 찌르기 스위치가 "Step3"상태로 전환되기를 원한다고 가정 해 봅시다. 소비자 통합 테스트에서 어떻게 할 수 있습니까?

추가 정보 : 소비자 통합 테스트 (Junit 테스트)에서 @AutoConfigureStubRunner 대신 StubRunnerRule을 사용합니다. 따라서이 규칙을 통해 스텁에 대한 상태를 설정하기 위해 일부 API를 사용할 수 있습니다. 하지만 아무것도 찾지 못했습니다.

답변

0

적절한 요청을 보내 서버를 상태로 전환 할 수 있습니다. step1에서 step2로 상태를 전환하려면 step1에서 step2 로의 전환을 트리거하는 적절한 요청을 보내야합니다. 보여주는 예제에서 step1에서 step2로, 그리고 step2에서 step3으로 전환하는 요청을 보내야합니다. 후자의 경우 WireMock 스텁에 설명 된대로 GET 메시지가됩니다. 그럼에도 불구하고 당신은 주와 관련된 이슈에 들어가고 있음을 기억하십시오. 스터브는 테스트 사이에 공유됩니다. @DirtiesContext 주석을 테스트에 전달하면 새 컨텍스트가 생성되고 원하는 방식으로 스텁을 설정할 수 있습니다.

마지막 발언 - 상태 저장 테스트를 사용하지 말고 문제를 독립적으로 테스트 할 수있는 별도의 단계로 분리하십시오. 그런 식으로 신속하고 평행하게 테스트 할 수 있습니다. 계약 테스트의 경우 반드시 스텁 측면에 어떤 상태도 필요하지 않습니다.

+0

감사합니다. Marcin. 네, 인터넷에서 여러 회담을 보면서 스테이트 풀 테스트에 관한 당신의 요지를 얻었습니다. 하지만 제작자가 동일한 요청에 대해 서로 다른 응답을 반환 할 때 소비자 서비스가 어떻게 반응하는지 테스트해야합니다. 소비자 서비스가 장바구니라고 가정 해 보겠습니다. 장바구니가 비었을 때와 그 안에 물건이있을 때 소비자 테스트를하고 싶습니다. 이 사건에 대해 당신은 무엇을 권할 수 있습니까? 지원해 주셔서 감사합니다. – Dmitry

+0

괜찮습니다! 나는 단계들을 분리하고 요청 응답 통신을 개별적으로 테스트 할 것이다. 접촉 테스트는 기능을 복제하지 않아야한다는 것을 기억하십시오. 실제로 제대로 의사 소통 할 수 있는지 여부를 테스트하기를 원합니다. 따라서 인프라 로직에서 비즈니스 로직을 분리 한 후 나는 다른 HTTP 통신을 스텁 아웃하여 전자를 테스트하고 전자는 세 가지 단계를 개별적으로 검사하여 테스트합니다. 어떤 의미가 있습니까? :) –

+0

또한 본문 또는 헤더별로 요청을 구분할 수 있습니다. 당신은 사람의 이름이 "사기"라면 그 사람을 "사기"상태로 바꿀 것이라고 생각할 수 있다고 발명 할 수 있습니다. 프로세스를 제어 할 수있는 방법입니다. –

관련 문제