문제

Java에서 안전한 공개 보증을 어떻게 단위로 테스트 하시겠습니까?

구체적으로 :

메소드 getorload (k 키, 객체 로더 로더)가있는 캐시 인터페이스가 있습니다. 캐시가 주어진 키에 대한 객체를 찾을 수 없으면 객체 로더 인스턴스에서로드해야합니다. 그러나 캐시는 로더에서 객체를로드하고 캐시에 넣는 행위가 안전한 출판물을 구성해야합니다.

나는이 캐시 인터페이스에 대한 일반적인 주니트 테스트를 작성하는 중이며 캐시 구현 이이 안전한 출판 보증을 준수하는 방법을 어떻게 테스트 할 것인지 궁금합니다.

어떤 아이디어? 실제 코드는 Test-Systest 모듈 부분에 있습니다. 코드 저장소 실제 파일을 찌르고 싶은 경우.

도움이 되었습니까?

해결책 2

나는 발견했다 Javaone 프레젠테이션 Bill Pugh, Brian Goetz 및 Cliff : 동시 코드 테스트 주제를 클릭하십시오. 그들은이 접근법을 제안했습니다. 마녀는 내가 들었던 최고라고 생각합니다.

많은 생산 업체가 상태 의존적 해시 코드 구현을 통해 상태가 있고 스레드-미지 안전 객체를 만듭니다. 객체가 예상 동기화 지점을 통해 보내짐에 따라 해시 코드가 합산됩니다 (스레드-로컬). 마찬가지로, 게이트 반대편에있는 소비자는 해시 코드를 합산합니다.

테스트가 끝나면 생산자와 소비자에 대한 모든 결과를 요약합니다. 두 합계가 같으면 테스트가 통과됩니다.

우리는 또한 XOR을 합의 대안으로 사용할 수 있습니다. 실제로, 모든 정류 작업이 수행됩니다. 테스트 하네스 자체가 추가 동기화를 도입해서는 안됩니다.

다른 팁

아마 당신은 사용할 수 있습니다 대회 적어도 코드가 정확하다는 확신을 더하십시오.

여러 스레드를 동시에 실행하는 몇 가지 테스트를 구현해야합니다. 그런 다음 컨테스트는 계기 바이트 코드 (휴리스틱으로 제어되는 조건부 수면 및 수율 지침 추가)에 의해 동시성 버그가 실제로 드러날 확률을 높입니다.

안전하지 않은 출판으로 인해 오류가 발생하는 것은 매우 어렵습니다 (누군가가 어떻게 알고 있다면, 알려주세요). 정적 분석은 자동화 된 솔루션에 가장 적합한 방법입니다. 나는 코드 검토를 고수하고 과도하게 걱정하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top