Property based testing을 시작하려고 합니다.
개시하다
학습 커뮤니티
Property based testing
에서 화제가 됐지만, 실제로 시도해 본 줄은 전혀 몰랐기 때문이다.그리고 제가 학습 내용을 총결하는 것을 허락해 주십시오.설치된 코드가 여기 있습니다.
Propertybased testing이란 무엇입니까?
무작위 반자동 테스트 데이터 생성.생성된 모든 값에 대해 만족해야 할 성질을 충족시키는지 테스트한다.
프로그램 라이브러리를 사용하니 실현될 것 같군.이번에는 패스트체크를 이용해서
참고 자료
주요 대표 라이브러리
Property based testing이 있는 이유는 무엇입니까?
단일 테스트를 실시하는 상황에서 경계치를 우려하기 때문에 개발자는 테스트에서 보증해야 할 처리를 미리 고려해야 한다. 테스트가 더욱 복잡한 기능을 실시하는 상황에서 테스트 용례를 망라하는 것은 매우 어렵다.
거기서 역할을 할 수 있는 건
Propert based testing
Property based testing
는 경계치 테스트로 유효하며 충분한 테스트 커버를 유지하는 동시에 테스트 용례를 관리 가능한 수량으로 줄인다.실천해 보다
그럼 바로 시작해 볼게요.
설치 참조여기..
fc.property()
의 첫 번째 파라미터fc.string()
에서 최저 문자수와 최고 문자수를 입력하여 무작위 데이터를 생성하고 두 번째 파라미터로 받은 데이터를 테스트한다.example
import fc from 'fast-check';
...
describe('パスワードは必ず8文字以上で20文字以下でならなければならない場合で', () => {
it('パスワードの値が8文字未満の場合は、falseを返す', () => {
fc.assert(
fc.property(fc.string({minLength: 0, maxLength: 7}),(password: string) => {
expect(validatePassword(password)).toBe(false)
})
)
})
it('パスワードの値が21文字以上の場合は、falseを返す', () => {
fc.assert(
fc.property(fc.string({minLength: 21, maxLength: 100}),(password:string) => {
expect(validatePassword(password)).toBe(false)
})
)
})
})
출력된 랜덤 데이터는 여기 있습니다.example
...
fc.assert(
fc.property(fc.string({minLength: 0, maxLength: 7}),(password: string) => {
console.log(password);
})
)
...
// 出力結果
XC0jf
z@i0]1*
zPq
Me3al
z V,
z$w`[
W"z%_z
또한 filter()
또는 map()
로 무작위로 생성된 수치를 데이터 가공하여 기대하는 데이터를 생성할 수 있다.example
const char = (charCodeFrom:number,charCodeTo: number) => fc.integer().map(String.fromCharCode);
const filteredStrings = (min: number,max: number,filter:RegExp) => {
return fc.array(
char(33, //'!'
126 //'~'
).filter(c => filter.test(c)),{minLength: min, maxLength: max}).map(arr => arr.join(''));
}
const filteredNumber = (min:number,max:number) => filteredStrings(8,20,/^[0-9]$/);
그리고 fc.assert()
마다 100번씩 무작위로 생성된 데이터를 테스트하면 망라성이 충분하다.참고 자료
최후
테스트 용례가 늘어나면서 지금까지 진행된 자동 테스트가 점점 어려워지는 것을 실감했기 때문에 이런 방법에 놀랐다.실제 업무에서도 활용할 수 있는 만큼 적극적으로 시행해달라고 당부했다.
Reference
이 문제에 관하여(Property based testing을 시작하려고 합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/ignorant_kenji/articles/6c38772c65f249텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)