우선 우리가 바로 용어를 얻을한다고 생각합니다. 테스트에서 "가짜"객체의 일반적인 그룹에는 두 가지가 있습니다. 미리 정의 된 입력에 대해 미리 정의 된 답변을 반환하는 모의 객체 (mock)와 SUT (테스트중인 시스템)가 통신하는 객체의 단순화 된 버전 인 스텁입니다. 모의는 기본적으로 응답을 제공하는 것 외에는 아무것도하지 않지만 스텁은 실시간 알고리즘을 사용할 수 있지만 결과를 데이터베이스에 저장하거나 예를 들어 eMail을 통해 고객에게 보내지는 않습니다. 나는 테스트에 전문가가 아니지만,이 두 가짜 물체는 오히려 단위와 수용 테스트의 범위에 따라 사용해야합니다.
그래서 통합 테스트 동안 당신의 솔기는 원격 시스템과 통신합니다. 제 책에서 이것은 소프트웨어가 다른 시스템과 어떻게 통합되는지 실제로 테스트하는 완벽한 시간이기 때문에 소프트웨어는 원격 시스템의 테스트 버전에 대해 테스트되어야합니다. 가능한 경우 (테스트 시스템이 없을 수도 있음) 개념적으로 문제가 있습니다. 원격 서비스와 통신하기 위해 작성한 소프트웨어 부분과 매우 흡사하게, 스텁 또는 모의을 원하는 방식으로 만 만들 수 있습니다. 이렇게하면 통합 테스트를 통해 테스트 할 몇 가지 중요한 사항이 제외됩니다. 클라이언트 측이 올바르게 구현되었으므로 라이브 서버와 함께 작동합니다. 서버 측에 구현 오류가 있기 때문에 해결해야 할 일이 있습니까? 원격 시스템과의 통신이 소프트웨어의 성능에 어느 정도 영향을 줍니까? 우리의 인증 자격 증명이 작동합니까? 인증 메커니즘이 작동합니까? 아무도 지금까지 생각하지 못했던이 의사 소통 관계의 기술적 및 개념적 의미는 무엇입니까? (나를 믿으십시오, 후자는 예상보다 자주 일어날 것입니다!)
일반적으로 말하기 : 모의 또는 스텁에 대한 통합 테스트를 수행하면 어떻게 구현할지에 대한 자신의 이해에 반하여 테스트 할 수 있습니다. 클라이언트와 통신의 서버 측에서 수행되며 클라이언트가 실제 원격 서버 또는 적어도 그 옆에있는 최상의 시스템 인 테스트 시스템과 어떻게 작동하는지 테스트하지 않습니다. 나는 경험에서 당신에게 말할 수 있습니다 : 원격 시스템이 어떻게 행동해야하는지에 대한 가정을하지 말고 테스트하십시오. JMS 서버에 대해 이야기 할 때조차도 테스트 해보십시오!
회사에서 근무하는 경우 제공되는 테스트 시스템을 테스트하는 것이 훨씬 더 중요합니다. 소프트웨어가 테스트 시스템에 대해 작동하고이를 증명할 수 있다면 (셀레늄은 훌륭한 도우미이자 훌륭한 로깅입니다. , 믿거 나 말거나) 소프트웨어가 라이브 버전에서 작동하지 않으면 "instablame"이라고 부르는 상황이 있습니다. 소프트웨어가 작동하지 않는 것이 사용자의 잘못이 아니라는 것이 즉시 명백합니다.나 자신은 뼈에 손가락을 꼽는 것을 싫어하지만, 대부분의 양복은 "누구의 잘못입니까?"라고 물어 보는 경향이 있습니다. 심지어 전에 "우리가 바로 그 문제를 해결할 수 있습니까?" 그리고 전에 "어떻게 그 문제를 해결할 수 있니?" 그리고 변호사라고하는 특수한 그룹의 변호사가 있습니다.;)
통합 테스트 중에 이러한 스텁을 반드시 사용해야한다면, 나는 그들 자신의 프로젝트를 만들 것입니다. "MyProject-IT-Stubs
"을 작성하고 메인 프로젝트의 IT를 실행하기 전에 MyProject-IT-Stubs
의 최신 버전을 빌드하고 실행하십시오 .Maven을 사용하는 경우 MyProject-IT-Stubs
을 war
패키징으로 작성하고 사전 통합 테스트 단계에서 종속성으로 호출하여 시작하십시오 이 전쟁의 부두를 같은 단계에서 수행 한 다음 성공적으로 통합 테스트를 실행하고 통합 후 테스트 단계에서 부두를 분해 할 수 있습니다.
IMHO 프로젝트를 Maven으로 구성하는 가장 좋은 방법은 ~한다. 세 가지 모듈 (MyProject
, MyProject-IT-Stubs
및 MyProject-IT
)을 가진 프로젝트가 있어야합니다 (MyProject
및 MyProject-IT-Stubs
에 대한 의존성 선언). 이렇게하면 프로젝트를 멋지고 깔끔하게 유지할 수 있으며 스텁이 프로젝트를 오염시키지 않습니다. MyProject-IT-Stubs
을 모듈로 구성하는 것에 대해 생각해 볼 필요가 있습니다. 하나는 원격 시스템마다 하나는 대화해야합니다. 테스트 액세스 권한이 있으면 즉시 MyProject-IT-Stubs
에있는 해당 모듈을 비활성화 할 수 있습니다.
InsertYourBuildToolHere
에 대한 옵션에 따라 제공됩니다.
모두 MockMvc를 사용하여 Spring MVC 컨트롤러를 실제로 통합 테스트하는 것으로 보이지만 MVC 컨트롤러를 테스트하지는 않습니다. –
정확히 컨트롤러를 테스트하는 방법입니다. 통합 테스트를 한 단계 더 진행하려면 Jetty와 같은 내장 된 컨테이너에서 응용 프로그램을 시작해야합니다. – geoand