TIL 230510_TEST CODE란?
✅TEST CODE?
말 그대로 우리가 작성한 코드에 문제가 없는지 테스트하기 위해 작성하는 코드!
일곱 테스트 원칙 (Seven Testing Principles)
- 테스팅은 결함의 존재를 보여주는 것이다.
- 완벽한 테스트는 불가능하다.
- 테스트 구성은 가능한 빠른 시기에 시작한다.
- 결함은 군집되어 있다.
- 살충제 역설(Pesticide Paradox) — 비슷한 테스트가 반복되면 새로운 결함을 발견할 수 없다.
- 테스팅은 정황에 의존적이다.
- 오류 부재의 오해 — 사용되지 않는 시스템이나 사용자의 기대에 부응하지 않는 기능의 결함을 찾고 수정하는 것은 의미가 없다.
테스트 코드의 종류
- 단위테스트(Unit Test) : 가장 작은 규모의 기능을 테스트 ex)repository, service, controller .. etc..
- 통합테스트(Intergration Test): 여러가지 기능을 합쳤을 때 생기는 문제를 방지하기 위한 테스트 ex)POST, GET ..etc..
✅JEST?
JS 테스트 프레임워크로 프론트/백엔드 개발에서 널리 사용되며 대규모 프로젝트에서도 효과적으로 사용됌.
사용방법 예시
- npm init -y
npm i jest -D - package.json파일을 아래와 같이 수정
{
...
"scripts": {
"test": "jest"
},
...
} - // validation.js
module.exports = {
isEmail: (value) => {
// value가 이메일 형식에 맞으면 true, 형식에 맞지 않으면 false를 return 하도록 구현해보세요
return false;
},
};
✅TDD(Test-Driven Devlopment)?
소프트웨어 개발 방법론 중 하나로, 테스트가 개발의 주도 역할을 하므로, 개발자가 테스트를 먼저 작성한 후에 해당 테스트를 통과 시키기 위한 코드를 작성하는 방법이다.
TDD의 주요한 원칙은 다음과 같다.
- 테스트 작성(Test First): 실제 코드를 작성하기 전에 해당 코드에 대한 테스트를 먼저 작성합니다. 테스트는 기대되는 동작을 명확하게 정의하고, 코드가 원하는 결과를 제공하는지 확인합니다.
- 테스트 실행(Execute Test): 작성한 테스트를 실행하여 현재 코드가 테스트를 통과하지 못하는지 확인합니다. 테스트는 초기에 실패할 것으로 예상됩니다.
- 코드 작성(Code Implementation): 테스트가 실패한 상태에서는 해당 테스트를 통과할 수 있는 최소한의 코드를 작성합니다. 목표는 테스트를 통과하는 코드를 작성하는 것입니다.
- 리팩토링(Refactor): 작성한 코드를 리팩토링하여 코드의 가독성, 유지보수성, 성능 등을 향상시킵니다. 이 단계에서도 테스트가 계속 통과되는지 확인합니다.
✅오늘 알게된 점 및 추후 학습 계획
우선 통합테스트의 과정을 추후에 알아보기 쉽게 정리해보았다.
**supertest란?통합테스트
통합테스트 순서
1. sequelize TestDB설정하기 (내 db에)
{
"development": {
"username": "root",
"password": "4321aaaa",
"database": "layered_architecture_pattern_db",
"host": "express-database.cv64ek1xh9gd.ap-northeast-2.rds.amazonaws.com",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": "4321aaaa",
"database": "layered_architecture_pattern_test_db",
"host": "express-database.cv64ek1xh9gd.ap-northeast-2.rds.amazonaws.com",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
2. sequelize TestDB 생성하기
# test 환경에 설정값을 이용해 DB를 생성합니다.
NODE_ENV=test npx sequelize db:create
# test 환경에 설정값을 이용해 Table을 생성합니다.
NODE_ENV=test npx sequelize db:migrate
3.각 api 테스트 시작하기
-GET/api/posts API의 검증 로직
a. API를 호출하였을 때 성공적으로 실행할 경우 200 Http Status Code를 반환한다.
b.API의 RES는 아무런 데이터를 삽입하지 않은 상태이므로 {data:[]}의 구조를 가진다.
-POST/api/posts 성공 API의 검증 로직
a.API를 호출하였을때 성공적으로 실행할 경우 201 Http Status Code를 반환한다.
b.API의 RES는 { data: createdPostData }의 형식을 가짐,
createdPostData는 { postId, nickname, title, content, createdAt, updatedAt} 객체형태
-POST/api/posts 실패 API의 검증 로직
a.API를 호출하였을때 InvalidParmasError 경우 400 Http Status Code를 반환한다.
b.API의 RES는 { errorMesssage: "InvalidParamsError" }의 형식을 가짐,
4. 생성된 데이터를 검증하는 통합테스트
테스트 코드가 다 작성되있을 때
npx jest --verbose --coverage 를 치면 테스트 코드가 어떻게 실행됐고 coverage가 어떤지 나온다.
단위테스트부터 통합테스트까지 따라해보는데에 생각보다 시간이 오래 걸렸다.
개념 자체를 어렵지 않았지만 어떤 부분을 어떻게 검사할건지 익숙해지지 않아서인 것 같다.
테스트코드 강의의 과제 및 기존에 내가 진행했던 프로젝트에 TEST CODE를 적용시키며 손에 익힐 예정이다.
화잇띵
'개발 > 차근차근 개발일지 TIL' 카테고리의 다른 글
WIL 230514 협업을 진행하며 느낀 아쉬운 점, 뿌듯한 점 (1) | 2023.05.14 |
---|---|
TIL 230513 항해99 페이스북 클론코딩1 (1) | 2023.05.14 |
TIL 230509_mini project(첫 협업!) (0) | 2023.05.09 |
TIL 230507_알기 쉽게 정리한 CORS/CORS에러! (0) | 2023.05.08 |
TIL 230504 시험_CRUDAPI_INDEX파일 없음 오류(어이없음주의) (0) | 2023.05.04 |