SqueakByExample:7.7

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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