> 웹 프론트엔드 > JS 튜토리얼 > Bun 테스트를 사용한 테스트 기반 개발(TDD)

Bun 테스트를 사용한 테스트 기반 개발(TDD)

Patricia Arquette
풀어 주다: 2024-12-29 17:15:15
원래의
952명이 탐색했습니다.

테스트 중심 개발(TDD)은 깔끔하고 버그 없는 코드를 작성하기 위한 강력한 방법론입니다. 이 기사에서는 속도와 단순성으로 유명한 Bun의 내장 테스트 실행기인 Bun Test를 사용하여 TDD를 구현하는 방법을 살펴보겠습니다.

TDD란 무엇입니까?

테스트 중심 개발(TDD)은 코드보다 테스트가 먼저 작성되는 소프트웨어 개발 방식입니다. TDD 사례는 구현을 안내하고 반복적인 작성, 테스트 및 리팩토링 주기를 통해 기능을 보장합니다.

TDD는 다음 단계를 따르는 개발 프로세스입니다.

  • 원하는 기능에 대한 테스트를 작성하세요.
  • 포괄하고 싶은 모든 테스트 시나리오를 정의하세요.
  • 테스트를 실행하고 실패하는지 확인합니다(기능이 불완전하거나 아직 모든 시나리오를 다루지 않을 수 있으므로).
  • 모든 테스트가 성공하도록 보장하면서 테스트를 통과하도록 코드를 업데이트하고 리팩토링하세요.

이 반복 프로세스는 강력하고 잘 테스트된 코드를 생성하도록 설계되었습니다.

Bun을 사용하여 JavaScript 프로젝트 설정하기

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()과 같은 간단한 함수에 중점을 둘 것입니다. 이를 통해 로직의 복잡성보다는 테스트 구조화에 집중할 수 있습니다.
계획은 다음과 같습니다.

  • 처음에 0을 반환하는 sum() 함수를 정의할 Calculator.ts 파일을 만듭니다.
  • 여러 테스트 사례를 포괄하는 sum() 함수에 대한 테스트를 작성합니다.
  • 테스트를 실행하고 실패하는지 확인합니다.
  • 테스트를 통과하도록 sum() 함수의 논리를 업데이트합니다.
  • 테스트를 다시 실행하여 구현이 올바른지 확인하세요.

Calculator.test.js 파일 만들기

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() 블록은 테스트할 특정 시나리오를 지정합니다. 각 테스트의 내용은 다음과 같습니다.

  1. 테스트: 두 개의 양수 더하기
    • 설명: "두 숫자의 합을 반환해야 합니다(둘 다 양수임)."
    • 이 테스트는 sum 함수가 두 양의 정수의 합을 올바르게 계산하는지 확인합니다.
    • 예: sum(2, 3)은 5를 반환할 것으로 예상됩니다.
  2. 테스트: 음수와 양수 더하기
    • 설명: "두 숫자의 합을 반환해야 합니다(하나는 음수)."
    • 이 테스트는 sum 함수가 하나의 숫자가 음수인 시나리오를 올바르게 처리하는지 검증합니다.
    • 예: sum(-1, 2)는 1을 반환할 것으로 예상됩니다.

이 테스트는 양수와 혼합(양수 및 음수) 입력을 모두 포함하여 합계 함수가 기본 덧셈 시나리오에서 예상대로 작동하는지 확인합니다.

Calculator.ts 파일 만들기

이제 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.
로그인 후 복사
로그인 후 복사
로그인 후 복사

Test-Driven Development (TDD) with Bun Test

이제 계산기에서 sum() 함수의 논리를 조정할 수 있습니다.ts sum() 함수의 논리를 조정합니다.

mkdir tests
touch tests/example.test.js
로그인 후 복사
로그인 후 복사
로그인 후 복사

이제 테스트를 실행하면 "녹색" ✅ 상태가 됩니다.

Test-Driven Development (TDD) with Bun Test

데이터 세트를 사용한 리팩토링 테스트

다른 시나리오(입력 값)로 동일한 테스트를 실행하려면 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;
}
로그인 후 복사

데이터세트는 배열의 배열입니다. 각 내부 배열은 요소가 다음에 해당하는 테스트 케이스를 나타냅니다.

  • a(추가할 첫 번째 숫자),
  • b(추가할 두 번째 숫자),
  • 예상(sum(a, b)의 예상 결과).

설명 함수는 더 나은 구성을 위해 sum 함수와 관련된 모든 테스트를 단일 블록으로 그룹화합니다.

describe() 블록에서 it.each(dataset)는 데이터세트 배열의 각 행을 반복합니다.
"%d와 %d의 합은 %d여야 합니다."는 테스트에 대한 설명 템플릿입니다. 여기서 %d는 각 반복 중에 데이터세트의 실제 숫자로 대체됩니다.
예를 들어 첫 번째 반복에서는 "2와 3의 합은 5가 되어야 합니다."라는 설명을 생성합니다.

콜백 함수(a, b, 예상)에서 데이터세트의 각 행 요소는 변수 a, b 및 예상으로 구조 해제됩니다. 그런 다음 테스트 내에서 a와 b를 사용하여 sum 함수를 호출하고, Expect()를 사용하여 결과를 확인하여 예상과 일치하는지 확인합니다.

it.each()(또는 test.each())를 사용하는 이유는 무엇입니까?

  • 효율성: 각 사례에 대해 별도의 it() 또는 test() 블록을 작성하는 대신 단일 데이터세트에 모든 테스트 사례를 정의하고 이를 반복할 수 있습니다.
  • 가독성: 테스트 로직이 간결하며 데이터 세트를 사용하면 코드를 복제하지 않고도 테스트 케이스를 쉽게 추가하거나 수정할 수 있습니다.
  • 확장성: 여러 테스트 사례를 처리할 때 유용하며, 특히 테스트 중인 논리가 사례 전체에서 유사한 경우에 유용합니다.

또 다른 실제 예: 평균 계산

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
로그인 후 복사
로그인 후 복사
로그인 후 복사

Test-Driven Development (TDD) with Bun Test

모든 테스트를 통과해야 합니다.
이 경우 구현은 이미 테스트되었으므로 추가 리팩토링이 필요하지 않습니다. 하지만 항상 시간을 내어 코드를 검토하여 개선 사항을 확인하세요.

테스트 범위

테스트 범위는 자동화된 테스트 중에 실행된 코드베이스의 비율을 측정하는 측정항목입니다. 테스트가 코드를 얼마나 잘 검증하는지에 대한 통찰력을 제공합니다.
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);
  });
});
로그인 후 복사
로그인 후 복사
로그인 후 복사

Test-Driven Development (TDD) with Bun Test

보장이 중요한 이유는 무엇입니까?

  • 테스트 공백 식별: 적용 범위 보고서는 코드의 어느 부분이 테스트되지 않았는지 강조합니다. 이는 중요한 논리가 간과되지 않도록 하는 데 도움이 됩니다.
  • 코드 품질 향상: 높은 적용 범위를 통해 극단적인 경우, 오류 처리 및 비즈니스 로직을 철저하게 테스트하여 버그 가능성을 줄입니다.
  • 리팩토링에 대한 자신감: 잘 테스트된 코드베이스가 있다면 테스트에서 회귀를 포착할 것이라는 확신을 갖고 리팩터링할 수 있습니다.
  • 더 나은 유지 관리: 높은 테스트 적용 범위를 갖춘 코드베이스는 업데이트 중에 의도하지 않은 변경 사항이나 부작용을 감지할 수 있으므로 유지 관리가 더 쉽습니다.
  • TDD 지원: 테스트 기반 개발을 실행하는 개발자의 경우 모니터링 범위를 통해 테스트가 구현과 일치하는지 확인할 수 있습니다.

적용 범위 목표의 균형

높은 테스트 범위가 중요하지만 이것이 코드 품질을 측정하는 유일한 척도는 아닙니다. 기능, 엣지 케이스, 애플리케이션의 중요한 부분에 초점을 맞춘 의미 있는 테스트를 목표로 하세요. 100% 커버리지를 달성하는 것이 이상적이지만 불필요하거나 사소한 테스트를 작성하는 대가를 치르지는 않습니다.

결론

Bun Test를 사용한 테스트 기반 개발(TDD)은 개발자가 요구 사항에 먼저 초점을 맞추고 반복 테스트를 통해 기능을 보장함으로써 깔끔하고 유지 관리가 가능하며 강력한 코드를 작성할 수 있도록 지원합니다. Bun의 빠르고 효율적인 테스트 도구를 활용하면 개발 프로세스를 간소화하고 엣지 케이스를 자신 있게 처리할 수 있습니다. TDD를 채택하면 코드 품질이 향상될 뿐만 아니라 처음부터 테스트 가능한 모듈식 코드를 작성하려는 사고방식이 조성됩니다. 작게 시작하고 자주 반복하며 테스트를 통해 구현을 진행하세요.

위 내용은 Bun 테스트를 사용한 테스트 기반 개발(TDD)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿