첫째, !
및 ^
염두에 두 가지 기준으로 선정되었습니다
을 피하기 위해 필요한 상대적으로 우선 순위가 시각적 혼란을 줄 것은 : !
동료 해당 설명을 테스트하는 코드가 포함 된 설명 및 ^
은 일련의 설명, 테스트, 서식 지정 주석 및 기타 지원 코드를 전체 테스트 스위트를 설명하는 객체.
"수용"사양의 핵심은 순수 기능입니다. 변경 가능한 스펙은 코드를 "등록"하기위한 변경 가능성을 이용합니다. 예를 들어, 이렇게 할 때 :
"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)
)
)
)
따라서 허용 규정은 조각으로 구성됩니다. 프래그먼트는 여러 가지 방법으로 구성 될 수 있습니다 (예 : 일부 코드와 관련된 설명 또는 다른 프래그먼트의 설명).
자동 작동, 주어진 시간 지정, 정규식 추출기, 부분 기능, 사양 출력 형식 지정 등과 같은 다양한 요구 사항을 허용하는 것은 실제로 복잡합니다.