powershell 모듈은 만들었습니다. 함수도 이미 많이 만들었습니다. Pester 모듈을 사용하는 테스트를 빨리 만드는 팁은 없을까요?
우선 Pester에 New-Fixture
라고 하는 명령어가 있습니다. 단 3.4.0 버전입니다. 최근 버전에는 실장되어 있지 않은 것 같습니다.
New-Fixture
|
|
이 함수를 사용하려고 생각하셨다면, 함수를 만들 때에 사용하셨어야합니다. 이 명령어는 함수를 정의하는 파일 하나와 그의 테스트파일 하나, 즉 두개의 ps1 파일을 생성해 냅니다. 만드는 자리는 옵션을 주지 않았다면 현재 디렉토리입니다. 예를 들어 다음 명령을 실행하였다면
New-Fixture Clean
.\Clean.ps1 파일 하나와
|
|
.\Clean.Tests.ps1 파일 하나를 생성해 냅니다. 함수 파일을 로드하는 코드까지 만들어 줍니다.
|
|
우선 Pester의 Test파일은 Describe > Context > It 순서로 외우시면 편합니다.
하나의 테스트파일에는 여러개의 Describe가 있을 수 있습니다.
Describe는 함수단위로 설정하는 경우가 많습니다. 그다음은 Context.
위의 에제에서는 Context라는 Layer가 없습니다만, 실제로 사용하실 때는 Context도 함께 사용합니다. Context는 주로
- 정상작동테스트
- 이상작동테스트
또는
- 로컬환경
- 개발환경
- 스테이징 환경
- 프러덕션 현경
별로 나누기도 합니다.
It은 그냥 하나의 단위 테스트를 나타냅니다.
Should
가능하면 최근버전, 엄밀히 말하면 버전 4 이상을 사용하는 것이 좋습니다. Windows10에서 기본으로 설치되어 있는 Pester의 버전이 3.4.0입니다만, 몇 가지 개선사항이 있습니다.
예를 들면 New-Fixture라는 명령어도 사라지고 (추측입니다만 함수의 파일과 Tests의 파일이 같은 디렉토리에서 생성되는 것을 강제하는 느낌이어서 제외시킨 것 같습니다.) 서브커맨드 형식이었던 Be
등이 옵션인 -Be
등으로 바뀌었습니다. 이쪽이 훨씬 IntelliSense등으로 Suggestion하기에는 더 적합합니다. 즉 IDE에서 지원해 주는 기능이 더 많기 때문에 가능하면 최근 버전을 사용하는 것이 좋습니다.
Should 는 테스트 ScriptBlock 안에서만 씌여져야 합니다. 그렇지 않으면 에러를 냅니다. 가장 간단한 형태의 테스트는 다음과 같습니다.
PS C:\www> describe "test" { it "test" { 1 | should -Be 1} }
Describing test
[+] test 67ms
기타 Should의 활용법은 다음과 같습니다.
- 1 | Should Be 1
- {throw “error”} | Should -Throw
- “aaa” | Should -Be “aaa”
- $Null | Should -BeNullOrEmpty
- 5 | Should -BeGreaterThan 0
- “.\Test1.ps1” | Should -Exist
- “tkim.info” | Should -BeOfType System.String
- “ABCDefg” | Should -BeLike “ab*”
- “ABCDefg” | Should -BeLikeExactly “ab*”
결과 보존하기
|
|
응용 1
파일이 아니라 모듈을 다시 load할 필요가 있다면 Import-Module을 고려하거나,
|
|
응용 2
결과와 기대값을 배열로 준비해 두거나
|
|
응용 3
모듈이 완성된 경우에는 다음의 템플릿을 이용하여 테스트 파일을 만들거나 할 수 있습니다.
|
|
이로서 기본적인 Pester의 사용법을 알아보았습니다. 다음번에는 Mocking의 응용을 살펴보려고 생각하고 있습니다.