상태 기계와의 모델 기반 테스트
모델 기반 테스트 : 자율성 포괄적 인 응용 프로그램 테스트
철저한 응용 프로그램 테스트는 코드 정확도를 보장하고 논리적 요구 사항을 충족시키는 데 중요합니다. 그러나 수동 테스트 생성은 시간이 많이 걸리고 오류가 발생하며 인간 편견에 취약합니다. 유지 보수는 특히 기능 추가 또는 논리 수정으로 중요한 과제가됩니다. 모델 기반 테스트는 추상 애플리케이션 모델을 기반으로 완전한 최신 테스트를 자동으로 생성하여 솔루션을 제공합니다.
소프트웨어 개발은 장치에서 통합 및 엔드 투 엔드 (E2E) 테스트에 이르기까지 다양한 테스트 방법에 의존합니다. 단위 및 정적 테스트는 쓰기가 더 간단하지만 구성 요소 간의 원활한 상호 작용을 보장하지는 않습니다. 통합 및 E2E 테스트는 시간 집약적이지만 실제 시나리오를 모방하여 사용자 예상 응용 프로그램 동작에 대한 확신을 제공합니다.
애플리케이션에서의 통합 및 E2E 테스트의 부족은 풍부한 단위 테스트에도 불구하고 자원이 제한된 자원, 시간 제약 및 그 중요성에 대한 이해 불충분 한 이해에서 비롯됩니다. 기존 통합/E2E 테스트를 통해 애플리케이션 변경은 광범위한 재 작성 및 신규 시험 생성이 필요하므로 마감일에 실용적이지 않습니다.
자동화에서자가 생성 테스트까지
현재 응용 프로그램 테스트 방법에는 다음이 포함됩니다.
- 수동 테스트 (자동 테스트 없음)
- 자동 테스트 (스크립트 테스트는 자동으로 실행됨)
- 테스트 자동화 (자동 테스트를 개발주기에 통합)
테스트 자동화는 시험 실행을 간소화하지만 테스트 생성은 수동으로 남아 있습니다. 모델 기반 테스트는 개발자가 예상 애플리케이션 동작을 설명하고 Edge Case를 포함한 포괄적 인 테스트를 자동으로 생성 할 수있게함으로써이를 해결합니다.
프로세스에는 다음이 포함됩니다.
- 추상적 인 행동 모델 생성 (지시 된 그래프).
- 그래프에서 테스트 경로를 생성합니다.
- 각 경로 단계를 실행 가능한 응용 프로그램 테스트에 매핑합니다.
통합 및 E2E 테스트는 다음 사이에 교대하는 단계로 구성됩니다.
- 응용 프로그램 상태 확인.
- 액션 시뮬레이션 (이벤트).
- 결과 상태를 확인합니다.
이것은 주어진시기 테스트 스타일을 반영합니다.
- 초기 상태가 주어졌습니다 .
- 행동이 발생할 때 .
- 그런 다음 새로운 상태가 예상됩니다.
이 모델은 모든 가능한 상태와 이벤트를 포함하며 내비게이션 앱의 경로 생성과 유사하게 경로를 자동으로 생성합니다.
예시 예 : 피드백 응용 프로그램
간단한 피드백 응용 프로그램을 고려하십시오.
- 패널은 "당신의 경험은 어땠습니까?"라고 묻습니다.
- 사용자는 "Good"또는 "Bad"를 클릭합니다.
- "좋은"은 "감사"화면을 보여줍니다.
- "나쁜"은 피드백 양식을 표시합니다.
- 양식 제출은 "감사"화면으로 이어집니다.
- 사용자는 "Close"또는 Escape Key를 통해 앱을 닫습니다.
@testing-library/react로 수동 테스트
@testing-library/react
라이브러리는 React 앱 테스트를 단순화합니다. 주요 방법은 다음과 같습니다.
-
getByText
: 텍스트 내용으로 요소를 식별합니다. -
baseElement
: 이벤트 트리거링의 루트 문서 요소에 액세스합니다. -
queryByText
: 오류를 던지지 않고 요소 존재를 확인합니다.
Jest 및 @testing-library/react
사용한 예제 :
// ... (가져 오기 명세서) ... 설명 ( '피드백 앱', () => { Afterach (정리); "좋은"클릭하면 감사 화면을 표시해야합니다. ', () => { // ... (테스트 로직) ... }); "나쁜"클릭하면 양식 화면을 표시해야합니다. ', () => { // ... (테스트 로직) ... }); });
이러한 테스트는 기능적이지만 반복으로 어려움을 겪고 응용 프로그램 변경 또는 에지 케이스로 유지 관리가 덜 유지됩니다. E2E 테스트는보다 현실적이지만 별도의 코드가 필요하며 이러한 테스트를 재사용 할 수 없습니다.
상태 기계 모델링
피드백 앱의 동작은 유한 상태 머신으로 표시 될 수 있습니다.
이 컴퓨터는 xstate를 사용하여 정의됩니다.
'xstate'에서 {machine} 가져 오기; const feedbackmachine = machine ({ // ... (주 머신 정의) ... });
이 모델은 응용 프로그램의 구현 세부 정보와 무관하게 테스트에만 사용됩니다.
@xstate/test로 테스트 모델을 만듭니다
@xstate/test
library는 주 머신에서 테스트 모델을 만드는 데 도움이됩니다.
'@xstate/test'에서 {createmodel} 가져 오기; const feedbackModel = CreateModel (피드백 마치);
이 모델은 상태 검증 테스트 ( meta.test
사용) 및 이벤트 실행 기능 ( withEvents
)이 필요합니다.
const feedbackmachine = machine ({ // ... 상태 : { 질문: { // ... 메타 : { 테스트 : ({getByTestId}) => { assert.ok (getByTestId ( 'QuestionScreen')); } } }, // ... } }); const feedbackmodel = createmodel (피드백 마치) .WitHevents ({ click_good : ({getByText}) => { fireeevent.click (getByText ( 'good')); }, // ... });
테스트 경로 생성
모델의 지시 된 그래프를 사용하면 가능한 모든 간단한 경로 (반복 노드 없음) 또는 초기 상태에서 가장 짧은 경로를 생성 할 수 있습니다. getSimplePathPlans()
테스트 계획을 생성합니다.
const testplans = testmodel.getSimplePathPlans ();
각 계획에는 대상 상태로의 경로가 포함되어 있습니다. 그런 다음 이러한 경로를 테스트합니다.
testplans.foreach (plan => { plan.paths.foreach (path => { it (path.description, () => { // ... (테스트 실행) ... }); }); });
path.test()
상태를 확인하고 동작을 실행하며 최종 대상 상태에 도달하도록합니다. testModel.testCoverage()
모든 주가 테스트되었는지 확인합니다.
모델 기반 테스트의 장점
모델 기반 테스트는 통합 및 E2E 테스트 생성을 단순화합니다. 기능이 변경 될 때 모델 만 업데이트해야하므로 테스트를 유지하는 것이 더 쉬워집니다. 추상 모델을 사용하면 통합 및 E2E 테스트 모두에 동일한 모델과 코드를 사용할 수 있습니다 (테스트 환경에 대한 약간 조정). 또한 철저한 테스트를 촉진하여 잠재적 인 가장자리 사례를 드러냅니다.
도전
모델 기반 테스트는 유한 상태 기계와 스테치 체라트를 이해해야합니다. 생성 된 테스트 경로의 수는 기하 급수적으로 증가하여 잠재적으로 중복 테스트로 이어질 수 있습니다. 그러나 이것은 가장 짧은 경로 또는 모델 리팩토링을 사용하여 완화 할 수 있습니다.
결론
모델 생성에 초기 노력이 필요하지만 모델 기반 테스트는 테스트 생성, 유지 보수 및 포괄적 인 범위에서 상당한 장기 이점을 제공합니다. 개발자가 더 적은 수의 효과적인 테스트를 작성하여 고품질 응용 프로그램을 초래할 수 있습니다. 제공된 자원은이 강력한 테스트 패러다임에 대한 추가 탐색을 제공합니다.
위 내용은 상태 기계와의 모델 기반 테스트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











그것은#039; VUE 팀에게 그것을 끝내는 것을 축하합니다. 나는 그것이 막대한 노력과 오랜 시간이라는 것을 알고 있습니다. 모든 새로운 문서도 있습니다.

최근 Bitcoin의 가격이 20k 달러가 넘는 USD가 최근에 등반되면서 최근 30k를 끊었으므로 Ethereum을 만드는 데 깊이 다이빙을 할 가치가 있다고 생각했습니다.

나는 누군가이 매우 합법적 인 질문으로 글을 썼습니다. Lea는 브라우저에서 유효한 CSS 속성 자체를 얻는 방법에 대해 블로그를 작성했습니다. 이는 이와 같습니다.

다른 날, 나는 Corey Ginnivan의 웹 사이트에서 스크롤 할 때 카드 모음이 서로 쌓이는 것을 발견했습니다.

WordPress 편집기에서 사용자에게 직접 문서를 표시 해야하는 경우 가장 좋은 방법은 무엇입니까?

목표가 귀하의 사이트를 동시에 다른 크기로 표시하는 이러한 데스크탑 앱이 많이 있습니다. 예를 들어, 글을 쓸 수 있습니다

플렉스 레이아웃의 보라색 슬래시 영역에 대한 질문 플렉스 레이아웃을 사용할 때 개발자 도구 (d ...)와 같은 혼란스러운 현상이 발생할 수 있습니다.
