2012-06-09 3 views
1

저는 스칼라와 스펙 2를 사용하기 시작했습니다. 그러나 spec2의 수용 스타일을 조금 혼란스럽게합니다.스칼라 specs2 수락 테스트 패턴 혼동

누군가 내게 설명 할 수있는 기능은 무엇입니까! 및이 경우 ^. 나는 문서를 읽었으며 아직도 이해하지 못합니다. 나는 단위 테스트 패턴을 이해하지만,이 부분은 나를 위해 이해하기가 정말 어렵다.

 

    "this is my specification"      ^
    "and example 1"         ! e1^ 
    "and example 2"         ! e2 

    def e1 = success 
    def e2 = success 
 

내가

http://etorreborre.github.com/specs2/guide/org.specs2.guide.Structure.html에서 그것을 가지고이 예

대단히 감사합니다.

답변

3

매우 간단합니다. 페이지에 쓰여 있듯이 ^은 프래그먼트 목록을 작성합니다. 단편은 문자열, 코드 블록이 첨부 된 설명 ("description"블록) 또는 빈 줄의 경우 p과 같은 제어 요소 일 수 있습니다.

Description("this is my specification") and 
    Description("and example 1").withBlock(e1) and 
    Description("and example 2").withBlock(e2) 

이것은 당신의 스펙 클래스의 상단에있는 def is =의 본문으로 할당됩니다 : 그래서 당신의 예를 읽을 수 있습니다. 내부적으로이 목록이 처리되고 각 설명에 대해 콘솔에 행이 인쇄되고 블록의 결과에 따라 색이 다르게됩니다.

그래서 요약하면 테스트 러너가 처리 할 항목 목록이 작성됩니다.

4

첫째, !^ 염두에 두 가지 기준으로 선정되었습니다

  • 는 그들이 무엇 괄호에게

을 피하기 위해 필요한 상대적으로 우선 순위가 시각적 혼란을 줄 것은 : ! 동료 해당 설명을 테스트하는 코드가 포함 된 설명 및 ^은 일련의 설명, 테스트, 서식 지정 주석 및 기타 지원 코드를 전체 테스트 스위트를 설명하는 객체.

"수용"사양의 핵심은 순수 기능입니다. 변경 가능한 스펙은 코드를 "등록"하기위한 변경 가능성을 이용합니다. 예를 들어, 이렇게 할 때 :

"a test" should { 
    "succeed" in { 
    success 
    } 
} 

이는 선언과 관련이 없습니다. 그것은 클래스 (생성자)의 몸체에있는 문장 일 뿐이므로 Specs2는 어떻게 그것에 대해 알 수 있습니까? 단순 : 코드가 실행되면 값 또는 변수가 자체적으로 등록되도록 변경됩니다.

그건 불변의 스펙이하지 않는 것입니다. 테스트는 is 메서드를 실행하여 수행되며 해당 메서드는 모든 테스트 목록을 반환해야합니다. "테스트 케이스"에 합류하지 ^ 방법은 (말하자면 - 실제하지 Specs2 용어를) 어떤 그래서

def is = List(
    new TestCase("A Test", new TestRule("succeed", success)), 
    new TestCase("Another test", new TestRule("not fail", success)) 
) 

, 어떤 !을 :의 매우 OO, 비 문법 설탕을 상상하자 그 일의 방법 않는가 "테스트 규칙"을 "테스트 케이스"에 연관시킵니다. 그것은 아래처럼 약간 작동합니다 - 정확히는 아닙니다. 저는 물건을 바꾸어 전통적인 OO처럼 보이게 만듭니다.

"this is my specification"      ^
"and example 1"         ! e1^ 
"and example 2"         ! e2 

new ExampleDescription("this is my specification")^
new ExampleDescription("and example 1")   ! e1^ 
new ExampleDescription("and example 2")   ! e2 

// an "Example" is a subclass of "Fragment" 
new ExampleDescription("this is my specification")  ^
new Example(new ExampleDescription("and example 1"), e1)^
new Example(new ExampleDescription("and example 2"), e2) 

new Fragment(
    new ExampleDescription("this is my specification"), 
    List(
    new Example(new ExampleDescription("and example 1"), e1), 
    new Example(new ExampleDescription("and example 2"), e2) 
) 
) 

new Fragments(
    new Fragment(
    new ExampleDescription("this is my specification"), 
    List(
     new Example(new ExampleDescription("and example 1"), e1), 
     new Example(new ExampleDescription("and example 2"), e2) 
    ) 
) 
) 

따라서 허용 규정은 조각으로 구성됩니다. 프래그먼트는 여러 가지 방법으로 구성 될 수 있습니다 (예 : 일부 코드와 관련된 설명 또는 다른 프래그먼트의 설명).

자동 작동, 주어진 시간 지정, 정규식 추출기, 부분 기능, 사양 출력 형식 지정 등과 같은 다양한 요구 사항을 허용하는 것은 실제로 복잡합니다.