SqueakByExample:7.7

From 흡혈양파의 번역工房
Jump to navigation Jump to search

SUnit 의 고급 기능

현재버전의 SUnit 에는 TestResource 뿐만 아니라 assertion description string 과 log 지원, 그리고 테스트를 실패한경우 다시시작resumable이 가능한 기능등이 포함되어 있습니다.


Assertion description string

TestCase 의 assertion 프로토콜은 프로그래머가 assertion 에 대한 명세description를 제공할 수 있도록 해주는 몇가지 메소드를 포함하고 있습니다. Description 은 문자열입니다; 만약 테스트 케이스가 실패하면 이 Description 문자열은 test runner 에 표시됩니다. 물론 이 Description 문자열을 동적으로 만들 수 도 있죠.

| e |
e := 42.
self assert: e = 23
  description: 'expected 23, got ', e printString


TestCase 에서 description 과 관련된 메소드들은 다음과 같습니다:

#assert:description:
#deny:description:
#should:description:
#shouldnt:description:


Log 지원

앞에서 설명한 description 문자열은 Trascript 또는 file stream 과 같은 Stream 에 의헤 log로 출력될 수 있습니다. 만들어지는 테스트 클래스에 TestCase>>isLogging 메서드를 재정의 함으로써 log 의 진행여부를 선택할 수 있으며, log 를 진행하는경우 적합한 stream 을 반환하기위해 TestCase>>failureLog 메서드를 재정의 함으로써 log 의 결과를 어디로 출력할지 선택해야 합니다.


Continuing after a failure(테스트실패 이후의 지속)

SUnit 에서는 테스트 실패 이후에, 진행되던 테스트를 지속해야할지에 대한 여부를 결정할 수 있습니다. 이것은 매우 강력한 기능으로써, 스몰토크에 의해 제공된 예외 메커니즘을 사용게 됩니다. 예제를 들어 이것이 어떤 용도에 사용될 수 있는지를 보겠습니다. 다음 테스트 표현식을 살펴보겠습니다:

aCollection do: [ :each | self assert: each even ]


이번 경우, 진행과정에서 짝수가 아닌 경우 컬렉션의 첫 번째 구성요소를 찾자마자 테스트는 정지됩니다. 그렇다 하더라도, 일반적으로는 테스트가 멈추기를 바라지도 않을거고, 얼마나 많은 구성요소들과 어떤 구성요소들이 짝수가 아닌지 확인을 원할수도 있으며, 아마도 이런 정보들을 지속적으로 log 할 필요가 있겠죠. 이렇게 테스트작업이 끝까지 계속되기 원하는경우, 이 작업을 다음처럼 변경하면 됩니다:

aCollection do:
[:each |
self
  assert: each even
  description: each printString , ' is not even'
  resumable: true]


위의 프로그램식은 실패하는 각 구성요소를 위해 지정된 log 시스템에 메시지를 출력합니다. 그리고 프로그램식은 실패 결과를 쌓아놓지는 않는데, 예를 들어 만약 assertion 이 여러분의 테스트 메서드에서 10번을 실패한다고 해도, 오직 한번의 실패 결과만 확인할 수 있다는 의미가 됩니다. 지금까지 살펴본 모든 assertion 메소드들이 문제가 있는경우 계속해서 실행되는것은 아닙니다; assert: p description: sassert: p description: s resumable: false 와 같은 의미가 됩니다.


Notes