3

JUnit 또는 TestNG 테스트 스위트를 병렬로 실행하기위한 지원이 있지만 특정 구성 (예 : 스레드 수 지정과 같은)이 필요하며 가장 중요한 것은 스레드 안전 코드가 아닌 경합 조건을 방지하지 않는다는 것입니다.JUnit/TestNG 테스트 스위트를 실행할 때 여러 코어를 활용할 수있는 * 실제 * 솔루션이 있습니까?

투명하게 (즉, 명시 적 구성없이) 스레드 안전성에 관계없이 경쟁 조건을 방지하면서 다른 CPU 코어 (동일한 프로세스 또는 다른 프로세스의 다른 스레드 사용)에 개별 테스트를 할당하는 도구가 있습니까?

그런 도구가 없다면 어떻게 구현하는 것이 가장 좋은 방법일까요?

+0

여러 프로세스가 경쟁 조건을 확실히 방지 할 것입니다. –

+0

물론, JUnit/TestNG 테스트 스위트에서는 Java 기반 도구가 있습니까? 그러한 평행선 테스트 도구가 @ThreadSafe 주석을 고려하고 @ThreadSafe에 주석이 달린 경우에만 이러한 클래스의 병렬 테스트에서만 실행될 수 있다면 좋을 것입니다. –

+0

나는 그것이 현실적인 기대라고 생각하지 않는다. (나는 그것이 가능할 지 모르겠다). 코어 당 하나의 JVM을 생성하고 각 JVM에서 테스트를 나누는 것은 어떻습니까? 이것이 얼마나 빠를까요? 한 가지 확실한 점은 테스트 스위트를 실행하고 CPU 모니터가 한 개의 코어 만 활성 상태임을 보여주는 16 코어 CPU를 보는 것은 불쌍합니다. ( – Gugussee

답변

0

일반적인 JUnit/TestNG 도구를 사용하여 동시에 테스트를 수행하는 것이 좋습니다.

이유는 간단하다 : 테스트는 다음 테스트가이 작업을 완벽하게의 행하신, 경쟁 조건으로 인해 실패하는 경우 - 그것은 당신의 디자인, 코드 또는 수정해야 동시성 가정에서 버그를 확인했습니다.

여러 테스트 스레드 (예 : 글로벌 기준으로 사용되는 가변 정적 싱글 톤 개체)에 의해 동시에 사용되는 스레드로부터 안전하지 않은 것은 디자인상의 결함 일 수 있습니다. 스레드를 안전하게 만들거나 매번 로컬 객체로 별도로 초기화하십시오.

+0

전적으로 동의하지 않습니다 ... OP는 특별히 비 threadsafe 코드에서 문제를 일으킬 수 있다고 지정했습니다. 스레드가 아닌 것으로 공식 문서화 된 공식 Java API의 모든 JavaDoc에 대한 의견은 무엇입니까? 다시해야한다. 모두 쓰레드 세이프가되도록 모두 쓰십시오. OPTIONS가 완벽하게 정당한 관심사임을 문서화하는 한, 비 threadsafe 코드를 작성하는 것은 완벽합니다. – Gugussee

+1

나는 그 점을 놓친 것 같아. 멀티 코어 CPU를 활용하여 테스트 실행 속도를 높이고 싶습니다. 스레드 안전을 위해 설계되지 않은 코드에서 경쟁 조건을 감지하려고 시도하지 않았습니다. –

+1

"당신이 *"경쟁 조건으로 인해 시험이 실패하면 시험이 그 일을 완벽하게 마쳤습니다 "* 그리고이 문장은 OP의 질문과 관련하여 완전히 잘못되었습니다. 코드가 비 스레드 세이프 (non-threadsafe)로 지정되면, 실패 할 경우 ** ** FISED MISERABLY ** 테스트가 실패합니다. – Gugussee

관련 문제