SqueakByExample:7.7: Difference between revisions

From 흡혈양파의 번역工房
Jump to navigation Jump to search
(SBE SUnit의고급특징들 페이지 추가)
 
(번역수정)
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
==SUnit의 고급 특징들==
==SUnit 의 고급 기능==


TestResource 뿐만 아니라, SUnit의 현재 버전은 assertion description string과 로그 지원(logging support) 그리고 재개 가능한 테스트 실패들을 포함하고 있습니다.  
현재버전의 SUnit 에는 TestResource 뿐만 아니라 assertion description string 과 log 지원, 그리고 테스트를 실패한경우 다시시작<sup>resumable</sup>이 가능한 기능등이 포함되어 있습니다.


===Assertion description string (주장 기술 문자열)===


TestCase assertion 프로토콜은 프로그래머가 assertion의 description을 공급할 수 있도록 해주는 여러 개의 메소드를 포함합니다. Description은 문자열(string)이며 만약 test case가 실패하면 이 문자열은 test runner에 의해 표시될 것입니다. 물론 이 문자열은 동적으로 구축될 (constructed ) 있습니다.  
 
===Assertion description string===
 
TestCase assertion 프로토콜은 프로그래머가 assertion 에 대한 명세<sup>description</sup>를 제공할 수 있도록 해주는 몇가지 메소드를 포함하고 있습니다. Description 은 문자열입니다; 만약 테스트 케이스가 실패하면 이 Description 문자열은 test runner 에 표시됩니다. 물론 이 Description 문자열을 동적으로 만들 도 있죠.


<syntaxhighlight lang="smalltalk">
<syntaxhighlight lang="smalltalk">
Line 15: Line 17:




TestCase에서 관련된 메소드들은:
TestCase 에서 description 과 관련된 메소드들은 다음과 같습니다:
 
<syntaxhighlight lang="smalltalk">
<syntaxhighlight lang="smalltalk">
#assert:description:
#assert:description:
Line 24: Line 27:




===로그 지원(Logging support)===


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




===실패 이후의 지속===


SUnit은 또한 실패(failure)이후에, 우리가 test가 지속되어야 할 지의 여부를 지정할 수 있도록 해줍니다. 이것은 매우 강력한 기능으로써, 스몰토크에 의해 제공된 예외 메커니즘(the exception mechanisms)을 사용합니다. 이것이 어떤 용도에 사용될 수 있는지를 보기 위해, 예시를 봅시다. 다음 테스트 표현식을 고려해 보십시오:
===Continuing after a failure(테스트실패 이후의 지속)===


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


<syntaxhighlight lang="smalltalk">
<syntaxhighlight lang="smalltalk">
aCollection do: [ :each | self assert: each even]
aCollection do: [ :each | self assert: each even ]
</syntaxhighlight>
</syntaxhighlight>




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


<syntaxhighlight lang="smalltalk">
<syntaxhighlight lang="smalltalk">
Line 52: Line 55:




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


==Notes==
==Notes==

Latest revision as of 05:36, 22 March 2013

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