싱글 톤으로 구현되었지만 stateless가 아닌 bean 때문에 코드에서 문제가 발생했습니다. 이로 인해 여러 요청 (웹 서비스)이 동시에 트리거되는 경우 예외가 발생하고 적절한 응답이 반환되지 않습니다.Junit을 사용하여 스프링 싱글 톤 구현을 테스트하십시오.
Junit을 사용하여 잡을 수 있습니까? 그렇다면 Junit을 어떻게 사용합니까? 그렇지 않은 경우 다른 대안이 있습니까?
싱글 톤으로 구현되었지만 stateless가 아닌 bean 때문에 코드에서 문제가 발생했습니다. 이로 인해 여러 요청 (웹 서비스)이 동시에 트리거되는 경우 예외가 발생하고 적절한 응답이 반환되지 않습니다.Junit을 사용하여 스프링 싱글 톤 구현을 테스트하십시오.
Junit을 사용하여 잡을 수 있습니까? 그렇다면 Junit을 어떻게 사용합니까? 그렇지 않은 경우 다른 대안이 있습니까?
일단 문제가 의심되면 junit을 사용하여 문제가 실제로 발생했음을 입증 할 수 있지만 여기에 위반 된 모범 사례를 적용하는 데는 적합하지 않습니다.
"싱글 톤에는 상태가 없어야합니다."
이것은 코딩 표준 문서에서 가정에서 더 많이 사용되는 문장이며 정적 코드 분석 도구로 시행 될 수도 있습니다.
스레드가 스레드를 실행하여 동시성 문제가 발생하지 않는다는 것을 증명하려고 시도하는 것은 불가능합니다. 그렇게한다면 운이 좋으면 문제가 있다는 것을 증명할 수 있습니다. 당신은 그것을 증명하지 못할 것입니다.
모범 사례를 알고 따르고 코드를 살펴 보는 것이 더 좋습니다.
사실 저는 100 % 싱글턴 상태가 절대 없어야합니다. 그러나 그들이 할 때 그들은 스레드간에 공유되는 경우 더 나은 동기화 또는 불변해야합니다.
스레드를 JUnit과 함께 사용할 수 있습니다. 백그라운드 스레드 두 개를 동시에 실행하여 서비스를 동시에 호출 한 다음 주 스레드에서 서비스를 호출하고 테스트가 통과하는지 확인하십시오. 개인적으로이 접근법을 사용하여 예를 들어 테스트했습니다. (낙관적/비관적) 잠금. 그러나 이것이 대부분의 동시성 문제를 찾아내는 데있어 특히 신뢰할만한 방법은 아니라고 생각합니다.
더 나은 대안은 SoapUI 또는 JMeter와 같은 부하 테스트 도구를 사용하고 여러 동시 소비자가있는 웹 서비스를 오랜 기간 동안 호출하는 것이고 오류가 발생하는지 확인하는 것이 좋습니다.
두 경우 모두 이러한 유형의 테스트를 계획해야합니다. 예를 들어 동시성 문제가 예상됩니다.
편집 : 코드 검토 (동시성이 좋은 사람들이)는 동시성 문제를 포착하는 데 매우 효과적인 수단입니다. 정적 코드 분석은 특별한 경우에도 도움이 될 수 있지만, 나는 그걸 혼자 내놓지 않을 것이다.
JUnit 혼자, 아니오. JUnit + Sprint Test, 아마도. –
범위를 프로토 타입으로 유지해야할까요? 왜 내가 초보자인지 설명하지 않으면. –
@ pathfinder2104 예, bean은 상태를 유지하므로 prototype이어야합니다. 그러나 문제는 JUnit을 사용하여 개발 단계에서이 문제가 발견되었는지 여부입니다. 그리고 대답은 프로젝트에 적용하는 통합 테스트의 종류에 달려 있습니다. –