2013-07-11 5 views
0

프롬프트가 sbt 프롬프트에서 내 수업입니다. SBT 프롬프트에서스텁 specs2 테스트를 병렬로 실행할 수 없습니다. 아래의

class Spec1 { 
    def is = { 
    function1^
    function2^
    function3^
    end 
    } 
def function1 = { 
    println("Spec1") 
} 
def function2 = { 
    Thread.sleep(120000) 
    println("sleeping-Spec1") 
} 
def function3 = { 
    println("Spec1") 
} 
} 


class Spec2 { 
    def is = { 
    function1^
    function2^
    function3^
    end 
    } 
def function1 = { 
    println("Spec2") 
    } 
def function2 = { 
    println("Spec2") 
    } 
def function3 = { 
    println("Spec2") 
    } 
} 


class MasterSpec { 
    def is = { 
    Step(setup)^new Spec1^new Spec2^Step(teardown) 
    } 
    def setup = { 
    setup code 
    } 
    def teardown = { 
    teardown code 
    } 
} 

은 내가 test-only MasterSpec

예상 출력을 실행 - 인쇄 문을 무작위로 인쇄됩니다. 기본적으로 sbt는 사양을 병렬로 실행하기 때문입니다. 출력물은 이와 같이 보일 것입니다.

Spec2 
Spec1 
Spec1 
Spec2 
sleeping-Spec1 
Spec2 

실제 출력 : - 인쇄 명령문이 순서입니다. 내가 개별 사양에 MasterSpec에서 설치 및 분해 방법을 복사 test-only Spec1 Spec2을 실행하면

Spec1 
sleeping-Spec1 
Spec1 
Spec2 
Spec2 
Spec2` 

, 내가 평행 실행할 수 있었다. test-only MasterSpec이 테스트를 병렬로 실행하지 않는 이유는 무엇입니까? MasterSpec에서 병렬 사양으로 실행할 수있는 방법이 있습니까?

답변

1

예제 실행의 병렬 처리는 실제로 사양 경계에서 중단됩니다. 당신이 할 수있는 한 가지 Spec1Spec2의 내용을 inline하는 것입니다

class MasterSpec { 
    def is = 
    Step(setup)^
     inline(new Spec1)^
     inline(new Spec2)^
    Step(teardown) 

    def setup = "setup code".pp 
    def teardown = "teardown code".pp 
} 

디스플레이는 비록 약간 다를 수 있습니다. 특히 spec 시작/스펙 종료 및 각 스펙에 대한 통계는 표시되지 않지만 모든 예제는 병렬로 실행됩니다.