포시코딩

테스트 코드(Test Code) - Jest 본문

Test Case

테스트 코드(Test Code) - Jest

포시 2022. 12. 31. 22:19
728x90

테스트 코드란?

테스트 코드는 말 그대로 작성한 코드에 문제가 없는지 테스트하기 위해 작성하는 코드이다.

흔히 테스트 기본 원칙이라고 불리는 '일곱 테스트 원칙'은 다음과 같다.

 

  1. 테스팅은 결함이 없는 것이 아니라, 결함의 존재를 보여주는 것이다.
  2. 완벽한 테스트는 불가능하다.
  3. 테스트 구성은 가능한 빠른 시기에 시작한다.
  4. 결함은 군집되어 있다.(결함의 80%는 20%의 코드로 인해 발생한다.)
  5. Pesticide paradox(살충제 역설) - 비슷한 테스트가 반복되면 새로운 결함을 발견할 수 없다.
  6. 테스트는 정황에 의존적이다.(상황에 따라 다르다.)
  7. 오류 부재의 오해 - 사용되지 않는 시스템이나 사용자의 기대에 부응하지 않는 기능의 결함을 찾고 수정하는 것은 의미가 없다.

https://www.boxuk.com/insight/the-seven-principles-of-testing/

 

The seven principles of testing

Box UK Tester Sian Prescott explains how to make your testing more effective by following this set of industry-standard best practice principles.

www.boxuk.com

https://ssowonny.medium.com/설마-아직도-테스트-코드를-작성-안-하시나요-b54ec61ef91a

 

설마 아직도 테스트 코드를 작성 안 하시나요?

가끔 욕을 먹고 싶을 때가 있을 수도 있죠. 가끔 지탄을 받고 꾸중을 들음으로써 자극을 받고 정신을 차리고 싶을 수도 있습니다. 아니면 혹은 그냥 아무 이유 없이 갑자기 한심한 눈초리를 받고

ssowonny.medium.com

 

테스트 코드를 작성하는 목적은 '내 코드가 멀쩡하다'라고 증명하기 위한게 아닌, 

'내 코드가 멀쩡하면 이렇게 결과가 나와야 한다.'이다.

 

테스트 코드 종류

  • 단위 테스트(Unit Test): 가장 작은 규모의 기능을 테스트 한다.
  • 통합 테스트(Integratioin Test): 여러가지 기능을 합쳤을 때 생기는 문제를 방지하기 위한 테스트다.
  • E2E 테스트(End-to-end Test): 끝에서 끝(종단 간)을 의미하는 End to end 테스트다.
    쉽게 말하면 백엔드부터 시작해서 최종적으로는 웹 페이지가 원하는대로 동작하며 원하는 데이터를 잘 보여주는지 확인한다.

이 외에도 돌연변이 테스트 등 다양한 기법들로 서비스를 더욱 치밀하고 탄탄하게 만들 수 있다.

 

단위 테스트(Unit Test)

단위 테스트는 가장 작은 단위의 테스트이며, 모든 테스트의 시작점이다. 

단위 테스트만 구성되어도 굉장히 많은 문제를 해결할 수 있으며, 코드 품질이 훨씬 좋아질 수 있다.

단위 테스트 F.I.R.S.T 원칙은 다음과 같다.

 

  • Fast: 유닛 테스트는 빨라야 한다.
  • Isolated: 다른 테스트에 종속적인 테스트는 절대로 작성하지 않는다.
  • Repeatable: 테스트는 실행할 때마다 같은 결과를 만들어야 한다.
  • Self-validating: 테스트는 스스로 결과물이 옳은지 그른지 판단할 수 있어야 한다.
    특정 상태를 수동으로 미리 만들어야 동작하는 테스트 등은 작성하지 않는다.
  • Timely: 유닛 테스트는 프로덕션 코드가 테스트를 성공하기 직전에 구성되어야 한다.
    테스트 주도 개발(TDD) 방법론에 적합한 원칙이지만 실제로 적용되지 않는 경우도 있다.

 

Jest - 테스팅 프레임워크

Jest는 Node.js를 통해 사용하고 있는 언어인 JavaScript에서 사용이 가능하고

페이스북에서 개발한 테스팅 프레임워크다.

 

설치

npm i jest -D

package.json

{
  "scripts": {
    "test": "jest"
  }
}

저장 후 jest를 npm test와 같은 명령어로 실행시킬 수 있다.

 

사용 방법 - 단위 테스트(Unit Test)

단위 테스트 코드 파일 생성은 일반적으로 테스트할파일이름.spec.js와 같은 형식으로 만든다.

jest 또한 위 형식의 이름을 가진 파일을 읽어들여 테스트 코드를 실행하는게 기본 설정이기도 하다.

 

jest 함수

  • test(): 단위 테스트를 묶어주는 함수
  • expect(): 특정 값이 만족되는지(정상적인지) 확인하기 위한 표현식을 작성할 수 있게 해주는 함수

 

validation.js

module.exports = {
    isEmail: (value) => {
        return false;
    },
};

validation.spec.js

const { isEmail } = require('./validation');

test('테스트가 성공하는 상황', () => {
    expect(isEmail('이메일이 아니에요')).toEqual(false);
});

test('테스트가 실패하는 상황', () => {
    expect(isEmail('my-email@domain.com')).toEqual(true);
});

npm test 명령어(또는 npm run test)를 실행하면 

이렇게 뜬다면 정상적으로 test를 한 것이다.

728x90

'Test Case' 카테고리의 다른 글

[Jest] mockImplementation, mockResolvedValue  (0) 2023.07.17
[Jest] 오토 모킹 vs 수동 모킹  (0) 2023.04.02
테스트 코드(Test Code) - supertest  (0) 2023.01.08
assert문이란?  (0) 2022.11.19
코드 커버리지(Code Coverage)란?  (0) 2022.11.19