Citrus Framework-JSON에서 유효성 검사기를 사용하려고하면 ACCEPT 헤더에 오류가 발생합니다.

Joseph Gagnon

HTTP REST를 통해 통신하는 Spring Boot 서비스를 위해 Citrus Framework를 사용하여 통합 테스트를 작성했습니다.

@isNumber()@항상 변경되는 타임 스탬프 와 같은 상황을 처리하기 위해 일부 Citrus 유효성 검사 "방법"을 JSON에 포함 할 수있었습니다 . 그러나 다른 사람을 시도했을 때 문제가 발생했습니다.

commandIDUUID를 포함하고 한 호출에서 다른 호출로 변경 될 가능성 이있는 다른 필드 ( )가 JSON에 있습니다. 처음 @match("<regex>")@에는 UUID 패턴을 일치시키기 위해 사용하기로 결정했고 문제가 발생했을 때를 사용하려고 전환 @ignore@했지만 동일한 문제가 발생했습니다.

다음은 콘솔의 오류입니다.

13:29:21.962 [main] ERROR com.consol.citrus.report.LoggingReporter - TEST FAILED MissionPlannerIT.testPlanMission <edu.mit.ll.mission_services.service.mission_planner> Nested exception is:
com.consol.citrus.exceptions.TestCaseFailedException: Validation failed: Values not equal for header element 'Accept', expected 'application/json' but was 'application/json,application/*+json'

여기에 문제가 무엇인지, 해결 방법도 모르겠습니다.

gen-route-command.json :

{
    "header": {
        "timestamp": "@isNumber()@",
        "typeID": "edu.mit.ll.mission_services.messages.GenerateRouteCommand",
        "transaction": {
            "id": 1,
            "startTime": "@isNumber()@"
        },
        "signature": {
            "algorithm": null,
            "keySize": 0,
            "keyValue": null,
            "sender": null
        }
    },
    "commandID": "@ignore@",
    "commandType": "GENERATE_ROUTE"
}

@isNumber()@기능이 작동하고 이러한 요소들의 매칭이 검증을 통과 할 수있다. @ignore@그러나 그렇지 않습니다. 두 가지 변형을 모두 시도했습니다. @ignore@@ignore()@, 둘 다 작동하지 않습니다. 앞서 언급했듯이 @match(...)@는 작동하지 않습니다.

업데이트 :

테스트 케이스 코드에서 유효성 검사를 시도하도록 수정했습니다. JSON의 값을 다시 UUID로 변경했습니다.

runner.http(builder -> builder
    .server(routeGeneratorServer)
    .receive()
    .post("/v1/missionServices/missionPlanning/generateRoute")
    .accept(ContentType.APPLICATION_JSON.getMimeType())
    .payload(new ClassPathResource("templates/gen-route-command.json"))
    .validate("$.commandID", "@ignore@"));

gen-route-command.json :

{
    "header": {
        "timestamp": "@isNumber()@",
        "typeID": "edu.mit.ll.mission_services.messages.GenerateRouteCommand",
        "transaction": {
            "id": 1,
            "startTime": "@isNumber()@"
        },
        "signature": {
            "algorithm": null,
            "keySize": 0,
            "keyValue": null,
            "sender": null
        }
    },
    "commandID": "0710d523-43da-4f68-90c7-a2b4544a955d",
    "commandType": "GENERATE_ROUTE"
}

불행히도 이것은 작동하지 않습니다. 원래 @ignore@또는 로 완화하려고했던 오류가 발생합니다 @match(...)@.

14:12:57.299 [main] ERROR com.consol.citrus.report.LoggingReporter - TEST FAILED MissionPlannerIT.testPlanMission <edu.mit.ll.mission_services.service.mission_planner> Nested exception is:
com.consol.citrus.exceptions.TestCaseFailedException: Failed to validate JSON text:
{"header":{"timestamp":1581016372132,"typeID":"edu.mit.ll.mission_services.messages.GenerateRouteCommand","transaction":{"id":1,"startTime":1581016372130},"signature":{"algorithm":null,"keySize":0,"keyValue":null,"sender":null}},"commandID":"9302ebde-894b-43a3-b7a3-92a158c7170e","commandType":"GENERATE_ROUTE"} Values not equal for entry: 'commandID', expected '0710d523-43da-4f68-90c7-a2b4544a955d' but was '9302ebde-894b-43a3-b7a3-92a158c7170e'

commandID는 새로운 UUID 각 실행을 생성하기 때문에 값이 다릅니다.

테스트의 유효성 검사가 값을 "무시"하지 않고 대신 JSON 유효성 검사가 UUID 차이에 플래그를 지정하는 것으로 보입니다.

Joseph Gagnon

JSON에 포함 된 Citrus "기능"이 문제가 아닌 것 같습니다. 문제는 Citrus 수신 호출에 대해 서비스가 게시하는 메시지에서 AcceptContent-Type헤더를 설정하지 않았다는 것 입니다. 수신 호출이 메시지 유형을 찾도록 설정 application/json되었으므로 내 메시지에 헤더가 전혀 없기 때문에 실패했습니다 (이는 내 인상입니다).

감귤류 호출 :

// Set route generator to receive and validate generate route command.
runner.http(builder -> builder
    .server(routeGeneratorServer)
    .receive()
    .post("/v1/missionServices/missionPlanning/generateRoute")
    .accept(ContentType.APPLICATION_JSON.getMimeType())
    .payload(new ClassPathResource("templates/gen-route-command.json")));

수신 한 "generate route command"메시지에 헤더가 정의되어 있지 않습니다. AcceptContent-Type헤더를로 설정하면 application/json테스트를 진행할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관