일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- GIT
- Sequelize
- nestjs
- cookie
- Python
- TypeScript
- MySQL
- 정렬
- MongoDB
- Dinosaur
- jest
- OCR
- dfs
- flask
- react
- Express
- mongoose
- AWS
- 게임
- nodejs
- Queue
- Nest.js
- JavaScript
- 자료구조
- game
- typeORM
- class
- Bull
- 공룡게임
- Today
- Total
포시코딩
테스트 코드(Test Code) - Jest 본문
테스트 코드란?
테스트 코드는 말 그대로 작성한 코드에 문제가 없는지 테스트하기 위해 작성하는 코드이다.
흔히 테스트 기본 원칙이라고 불리는 '일곱 테스트 원칙'은 다음과 같다.
- 테스팅은 결함이 없는 것이 아니라, 결함의 존재를 보여주는 것이다.
- 완벽한 테스트는 불가능하다.
- 테스트 구성은 가능한 빠른 시기에 시작한다.
- 결함은 군집되어 있다.(결함의 80%는 20%의 코드로 인해 발생한다.)
- Pesticide paradox(살충제 역설) - 비슷한 테스트가 반복되면 새로운 결함을 발견할 수 없다.
- 테스트는 정황에 의존적이다.(상황에 따라 다르다.)
- 오류 부재의 오해 - 사용되지 않는 시스템이나 사용자의 기대에 부응하지 않는 기능의 결함을 찾고 수정하는 것은 의미가 없다.
https://www.boxuk.com/insight/the-seven-principles-of-testing/
https://ssowonny.medium.com/설마-아직도-테스트-코드를-작성-안-하시나요-b54ec61ef91a
테스트 코드를 작성하는 목적은 '내 코드가 멀쩡하다'라고 증명하기 위한게 아닌,
'내 코드가 멀쩡하면 이렇게 결과가 나와야 한다.'이다.
테스트 코드 종류
- 단위 테스트(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를 한 것이다.
'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 |