✔️TDD 7

[Clean code] Chapter 09. Unit test

Clean Code 클린 코드 - 로버트 C. 마틴 저 를 읽고, clean code 해설 강의를 통해 제가 이해한 바를 정리한 글입니다. 테스트 코드를 추가하는 것을 넘어서 제대로 된 테스트 케이스를 작성해야 한다. 1. 테스트 코드의 중요성 테스트 코드는 실수를 바로 잡아준다. 코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 단위 테스트이다. 테스트 케이스가 없다면 모든 변경이 잠정적인 버그인 반면 테스트 케이스가 있으면 코드 변경이 두렵지 않다. 그래서 테스트 커버리지가 높을 수록 버그에 대한 공포가 줄어든다. 강의에서 추천 해 준 책 'Effective Unit Testing - 라쎄 코스켈라' 에서 말하는 테스트의 중요성에는 테스트는 실사용에 적합한 설계를 끌어내준다. 테스트를 작성해서..

[TDD] Python Testing Framework - Pytest, unittest - Coverage

1. Coverage Code Coverage에 대해서는 를 보고 쉽게 이해할 수 있었습니다. Installation: $ pip install coverage Unittest: $ coverage run --branch -m unittest Pytest: $ coverage run --branch -m pytest Use $ coverage report -m to report on the results $ coverage html to get annotated HTML listings detailing missed lines 2. Coverage report tool Codecov + Github Actions Github actions에서 main 브랜치에 push 나 PR을 하면 pytest와 un..

Dev/SW Engineering 2021.08.16

[TDD] Python Testing Framework2 - Pytest, Unittest - mocking

1. Mock mocking이 필요한 경우를 예시로 들고, 해당 mocking을 Unittest로 구현할 때와 Pytest로 구현할 때를 나누어서 살펴보겠습니다. 1) Random result mocking import random import requests def roll_dice(); print("rolling...") return random.randint(1, 6) def quess_number(num): result = roll_dice() if result == num: return "You won!" else: return "You lost!" 이런 코드가 있을 때, Random 모듈이 잘 작동하는지가 아닌 random의 결과가 있을 때, 내가 작성한 guess_number 함수가 기대대로..

Dev/SW Engineering 2021.08.16

[TDD] Python Testing Framework 1 - Pytest, unittest

1.Installation and Getting Started (unittest / pytest) 1) Unittest unittest는 python에 내장되어있어 따로 설치하지 않아도 되는 표준 라이브러리 입니다. 그래서 바로 import해서 사용할 수 있습니다. import unittest 2) Pytest pytest는 설치를 하고, import하여 사용합니다. $ pip install pytest import pytest 2. Naming Conventions (unittest / pytest) 1) Unittest 파일명: test로 시작 Unittest에서는 지정된 파일은 반드시 모듈로 import 가능해야 합니다. 메소드명: test로 시작 단위 테스트의 기본 구성 블록인 TestCase를 ..

Dev/SW Engineering 2021.05.21

[TDD] 통합 테스트(Integration Test)

이전에 [TDD] TDD 시작하기 (Unit Test, Jest)에서 Unit Test에 대해서 알아보고 작성해보았다. 이제 Integration Test에 대해 알아보고자 한다. Integration Test 통합 테스트란 모듈을 통합하는 단계에서 수행하는 테스트로, Unit Test를 통해 각 모듈들이 잘 작동되는 것을 확인했다면 이제 이 각 모듈들을 연동해서 테스트를 수행해야하는데, 이를 통합 테스트라고 한다. 통합 테스트를 하는 이유 모듈들의 상호 작용이 잘 이루어지는지 검증하기 위해 통합하는 과정에서 발생할 수 있는 오류를 찾기 위해 Supertest 단위 테스트시에는 Jest를 사용하였는데, 통합 테스트에는 Supertest 모듈을 사용해서 진행할 수 있다. Supertest는 ExpressJ..

Dev/SW Engineering 2021.02.26

[TDD] node-mocks-http 모듈, Jest의 beforeEach 사용

[TDD] TDD 시작하기 (Unit Test, Jest)의 와 에서 몽구스 모델을 이용한 Products 데이터베이스 테이블에 product 데이터를 저장(create)할 때 단계적으로 유닛테스트를 진행하면서 구현해보았다. 그래서, 구현하고자 했던 것은 product 데이터 생성을 위한 함수 작성 createProduct 함수를 호출할 때 Product Model의 Create 메소드가 호출 이었고, 이에 대한 유닛 테스트 코드는 // test/unit/product.test.js const productController = require('../../controller/products'); const productModel = require('../../models/Product'); //Mock함..

Dev/SW Engineering 2021.02.24

[TDD] TDD 시작하기 (Unit Test, Jest)

Unit Test 유닛 테스트란 프로그래밍 후 소스 코드의 프로그램의 기본 단위인 모듈이 의도대로 정확히 작동하는지 검증하는 절차이다. 즉, 소스 코드의 개별 단위를 테스트하여 사용할 준비가 되었는지 확인하는 테스트 방법이다. 1) 유닛 테스트를 하는 이유 프로그램이 커서 메모리가 많이 들고 다른 리소스(데이터베이스 등)이 막 필요한 경우 로컬 환경에서 코드를 실행시켜보기도 어렵고, 그걸 매번 수동으로 QA해보기도 어렵다. 그래서 유닛 테스트를 만들어서 빠르게 자신의 코드가 정상적으로 작동 하는지 확인 하는 것이 좋다. 종속성이 있는 다른 클래스들에서 버그가 나는 것을 방지하기 위해서이다. 예를 들어, A Class에서 버그가 나는데, 그것이 A class 내의 Common class 에서 발생하는 에러..

Dev/SW Engineering 2021.02.22