테스트 중심 개발(TDD)은 깔끔하고 버그 없는 코드를 작성하기 위한 강력한 방법론입니다. 이 기사에서는 속도와 단순성으로 유명한 Bun의 내장 테스트 실행기인 Bun Test를 사용하여 TDD를 구현하는 방법을 살펴보겠습니다.
테스트 중심 개발(TDD)은 코드보다 테스트가 먼저 작성되는 소프트웨어 개발 방식입니다. TDD 사례는 구현을 안내하고 반복적인 작성, 테스트 및 리팩토링 주기를 통해 기능을 보장합니다.
TDD는 다음 단계를 따르는 개발 프로세스입니다.
이 반복 프로세스는 강력하고 잘 테스트된 코드를 생성하도록 설계되었습니다.
Bun을 설치하지 않은 경우 Bun JavaScript 설명서의 지침에 따라 설치하세요.
그런 다음 새 프로젝트를 초기화합니다.
bun init
➜ example bun init bun init helps you get started with a minimal project and tries to guess sensible defaults. Press ^C anytime to quit package name (example): entry point (index.ts): Done! A package.json file was saved in the current directory.
테스트 디렉터리(예: 테스트/example.test.js)에 테스트 파일을 만듭니다. Bun은 테스트를 위해 .test.ts 또는 .test.js로 끝나는 파일을 자동으로 감지합니다.
mkdir tests touch tests/example.test.js
간단한 예부터 시작해 보겠습니다.
몇 가지 수학 함수를 구현하기 위해 계산기 파일을 생성하겠습니다.
JavaScript에는 이미 기본 추가 연산자가 있지만 먼저 sum()과 같은 간단한 함수에 중점을 둘 것입니다. 이를 통해 로직의 복잡성보다는 테스트 구조화에 집중할 수 있습니다.
계획은 다음과 같습니다.
tests/calculator.test.js 파일에서 테스트를 구현할 수 있습니다.
import { describe, expect, it } from "bun:test"; import { sum } from "../calculator"; describe("sum function", () => { it("should return the sum of two numbers (both are positive)", () => { expect(sum(2, 3)).toBe(5); }); it("should return the sum of two numbers (one is negative)", () => { expect(sum(-1, 2)).toBe(1); }); });
이 테스트는 계산기 모듈에 정의된 sum() 함수의 동작을 확인합니다. 테스트는 Bun의 테스트 라이브러리를 사용하여 작성되었으며 "sum function"이라는 설명 블록 내에서 구성됩니다. explain() 블록은 "유사한" 테스트를 그룹화하는 데 도움이 됩니다. 각 it() 블록은 테스트할 특정 시나리오를 지정합니다. 각 테스트의 내용은 다음과 같습니다.
이 테스트는 양수와 혼합(양수 및 음수) 입력을 모두 포함하여 합계 함수가 기본 덧셈 시나리오에서 예상대로 작동하는지 확인합니다.
이제 sum() 함수를 내보낼 계산기 모듈을 만들 수 있습니다.
Calculator.ts 파일에서:
bun init
첫 번째 버전의 함수는 하드코딩된 값을 반환하므로 테스트가 실패할 것으로 예상됩니다.
테스트 실행:
➜ example bun init bun init helps you get started with a minimal project and tries to guess sensible defaults. Press ^C anytime to quit package name (example): entry point (index.ts): Done! A package.json file was saved in the current directory.
이제 계산기에서 sum() 함수의 논리를 조정할 수 있습니다.ts sum() 함수의 논리를 조정합니다.
mkdir tests touch tests/example.test.js
이제 테스트를 실행하면 "녹색" ✅ 상태가 됩니다.
다른 시나리오(입력 값)로 동일한 테스트를 실행하려면 Each() 메소드를 사용하면 됩니다.
import { describe, expect, it } from "bun:test"; import { sum } from "../calculator"; describe("sum function", () => { it("should return the sum of two numbers (both are positive)", () => { expect(sum(2, 3)).toBe(5); }); it("should return the sum of two numbers (one is negative)", () => { expect(sum(-1, 2)).toBe(1); }); });
이 코드는 데이터세트 기반 접근 방식을 사용하여 계산기 모듈의 합계 함수를 테스트합니다. it.each() 메서드는 입력 및 예상 출력 데이터 세트를 반복하여 반복적인 테스트 사례를 단순화하는 데 사용됩니다. 작동 방식은 다음과 같습니다.
먼저 데이터세트를 정의할 수 있습니다
export function sum(a: number, b: number) { // Function yet to be implemented return 0; }
데이터세트는 배열의 배열입니다. 각 내부 배열은 요소가 다음에 해당하는 테스트 케이스를 나타냅니다.
설명 함수는 더 나은 구성을 위해 sum 함수와 관련된 모든 테스트를 단일 블록으로 그룹화합니다.
describe() 블록에서 it.each(dataset)는 데이터세트 배열의 각 행을 반복합니다.
"%d와 %d의 합은 %d여야 합니다."는 테스트에 대한 설명 템플릿입니다. 여기서 %d는 각 반복 중에 데이터세트의 실제 숫자로 대체됩니다.
예를 들어 첫 번째 반복에서는 "2와 3의 합은 5가 되어야 합니다."라는 설명을 생성합니다.
콜백 함수(a, b, 예상)에서 데이터세트의 각 행 요소는 변수 a, b 및 예상으로 구조 해제됩니다. 그런 다음 테스트 내에서 a와 b를 사용하여 sum 함수를 호출하고, Expect()를 사용하여 결과를 확인하여 예상과 일치하는지 확인합니다.
TDD에 대한 추가 예를 보여주기 위해 숫자 배열의 평균(평균)을 계산하는 계산기 모듈에 평균 함수를 구현해 보겠습니다. TDD 접근 방식에 따라 테스트 작성부터 시작하겠습니다.
이미 존재하는 Calculator.test.js에 평균() 함수와 관련된 다음 테스트를 추가하세요.
bun init
이제 Calculator.ts 파일에 평균() 함수를 추가하세요.
➜ example bun init bun init helps you get started with a minimal project and tries to guess sensible defaults. Press ^C anytime to quit package name (example): entry point (index.ts): Done! A package.json file was saved in the current directory.
이제 테스트를 다시 실행할 수 있습니다
mkdir tests touch tests/example.test.js
모든 테스트를 통과해야 합니다.
이 경우 구현은 이미 테스트되었으므로 추가 리팩토링이 필요하지 않습니다. 하지만 항상 시간을 내어 코드를 검토하여 개선 사항을 확인하세요.
테스트 범위는 자동화된 테스트 중에 실행된 코드베이스의 비율을 측정하는 측정항목입니다. 테스트가 코드를 얼마나 잘 검증하는지에 대한 통찰력을 제공합니다.
Bun 테스트 커버리지는 "라인 커버리지"를 식별하는 데 도움이 됩니다.
라인 커버리지는 테스트 스위트 중에 각 코드 라인이 실행되는지 여부를 확인합니다.
테스트 취재 진행:
import { describe, expect, it } from "bun:test"; import { sum } from "../calculator"; describe("sum function", () => { it("should return the sum of two numbers (both are positive)", () => { expect(sum(2, 3)).toBe(5); }); it("should return the sum of two numbers (one is negative)", () => { expect(sum(-1, 2)).toBe(1); }); });
높은 테스트 범위가 중요하지만 이것이 코드 품질을 측정하는 유일한 척도는 아닙니다. 기능, 엣지 케이스, 애플리케이션의 중요한 부분에 초점을 맞춘 의미 있는 테스트를 목표로 하세요. 100% 커버리지를 달성하는 것이 이상적이지만 불필요하거나 사소한 테스트를 작성하는 대가를 치르지는 않습니다.
Bun Test를 사용한 테스트 기반 개발(TDD)은 개발자가 요구 사항에 먼저 초점을 맞추고 반복 테스트를 통해 기능을 보장함으로써 깔끔하고 유지 관리가 가능하며 강력한 코드를 작성할 수 있도록 지원합니다. Bun의 빠르고 효율적인 테스트 도구를 활용하면 개발 프로세스를 간소화하고 엣지 케이스를 자신 있게 처리할 수 있습니다. TDD를 채택하면 코드 품질이 향상될 뿐만 아니라 처음부터 테스트 가능한 모듈식 코드를 작성하려는 사고방식이 조성됩니다. 작게 시작하고 자주 반복하며 테스트를 통해 구현을 진행하세요.
위 내용은 Bun 테스트를 사용한 테스트 기반 개발(TDD)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!