본문 바로가기

소프트웨어-이야기/테스트-자동화

Mock VS Stub VS Spy Mock 반환값이 없는 함수를 테스트할 때, 특정 객체에서 특정 함수가 호출되었는지 테스트할 때 사용한다. Stub 특정 객체에서 특정 함수를 호출할 때, 특정한 값이 반환되라고 더미 데이터를 지정할 때 사용한다. Spy 특정 함수만 실제 함수를 호출하게 하고 싶을 때 사용한다. mocking을 사용할 때, 세가지의 역할이 구분되지 않아 마구 섞어쓰게된다. 그런데 각자 용도가 다르기 때문에 한번 생각해보고 쓰자.
gradle build와 Jenkins gradle java plugin을 사용하면, build 명령문 실행 시, gradle에서 task check 함수를 실행한다. 그래서 단순히 gradlew build 명령문으로 build를 하는 경우, 테스트에 실패해도 젠킨스에는 build 실패로 뜨게 된다. 이렇게 build / test 단계를 나눠서 구성하는 경우, build 단계에 check 명령문을 제외 (-x)하겠다는 옵션을 추가해줘야한다. 그러면 Build 단계에서 테스트를 실행하지 않는다. gradlew build -x check 참고 https://proandroiddev.com/understanding-gradle-the-build-lifecycle-5118c1da613f https://www.testmo.com/guides/jenki..
(Gitlab CI) Gitlab에 테스트 CI 연동하기 - Django + Postgresql 배경 최근에 신규 프로젝트를 진행하면서, 코드의 구조를 변경하는 경우가 잦아졌다. 빠른 사이클로 기능을 구현하다보니, 회귀 테스트를 못하게 되는 경우가 빈번해졌다. 그러면서 잘 동작하던 코드들이 고장나는 경우가 많아졌고, 디버깅으로 인한 삽질이 늘어나기 시작했다. 이런 고통의 루프에서 벗어나고자 gitlab ci으로 테스트빌드 자동화를 적용해보았다. gitlab-ci 장점 gitlab ci에 테스트 자동화를 적용하면, gitlab에 코드를 push할 때마다 자동으로 테스트코드를 돌려준다. 그리고 풀리퀘스트를 날릴 때에도 자동으로 돌려주고, 성공/실패여부도 자동으로 알려준다 😄 이해만 한다면, gitlab ci는 꽤 쉽다. gitlab ci 준비물 a. gitlab runner gitlab ci에 등록한 ..
(Pytest) Fixture 모아두기 - conftest.py conftest.py Django Pytest 에서 공통으로 사용되는 Fixture / Plugin / Module을 모아두는 파일이다. 테스트가 돌아갈 때, 공통적으로 호출되어야하는 Hook들도 이 파일에서 관리한다. conftest.py은 도메인 모듈 (디렉토리)별로 나눠서 관리하는걸 권장한다. 도메인별로 Fixture를 나눠서 관리하는게 좋고, Fixture를 여러개 만들면 테스트가 느려질 수 있기 때문이다. 샘플 보통 어떻게 활용하는지는 아래의 샘플 코드를 참고하면 감잡을 수 있다 :) saleor > conftest.py https://github.com/mirumee/saleor/blob/master/tests/conftest.py shuup > conftest.py https://github..
(Pytest) Fixture에 매개변수 넘겨주기 함수 호출부에서 Fixture의 일부 데이터를 변경하고 싶다면, 아래와 같이 Fixture에 매개변수를 넘겨주면 된다.@pytest.fixture() def facebook_user_data(): def _data(user_id, email): return { "hometown": "Your, Hometown", "birthday": "01/01/1985", "email": email, "id": id } return _data 호출 방식은 다음과 같다.class TestUserInfo: def test_get_data__회원기본정보와_페이스북정보를_반환한다(self, mocker, facebook_user_data): user = UserFactory.create() facebook_user_data ..
(Travis CI) GitHub에 테스트 CI 연동하기 Travis CI테스트코드 돌리는 CI 툴이다. 도커 컨테이너 기반으로 돌리는거여서, 테스트 서버 환경 구성 필요없이 온라인상에서 테스트 코드를 돌릴 수 있다.간단하게 테스트 CI를 설정할 수 있고, 오픈소스에서는 무료이기 때문에, 많은 오픈소스에서 Travis CI를 사용하고 있다. ( django-oscar, aws-codedeploy-agent 등등.. )But. 프라이빗은 유료다. gitlab은 지원하지 않는다. 😧 GitHub Repository 연결하는 방법1. 트레비스에 가입한다. 그 다음, 트레비스에 github 레파지토리 권한을 준다. 2. 레파지토리에 .travis.yml 파일을 추가해준다. 3. 연결되고 나면 github commit마다 테스트 결과가 뜬다. 아래에 뜬 check 박스..
TDD Coding Dojo - 테스트코드 작성 연습 방법 이번달에 유닛테스트 작성방법 관련 스터디를 시작했다 ㅎㅅㅎ. 진행방식을 조사하다가, TDD KATA, Coding Dojo 라는 학습 방식을 알게되어 정리해보고자 한다. Coding Dojo 란? dojo는 일본말이다. 한국말로는 도장이다. 태권도 도장의 도장. Coding Dojo란, 코딩 배우는 도장을 말한다. 함께 모여서, 실무가 아닌 연습 문제를 풀어보면서, 여러가지 프로그래밍 스킬을 학습하는 방법론을 의미한다. Coding Dojo로 기대하는 바는?좋은 코딩 습관 익히기그룹 단위로 학습하기 의도적으로, 기존과는 다른 스킬들을 익히기 재밌게 학습하기 Coding Dojo로 얻을 수 있는 스킬은? 단순한 코딩 스킬 뿐만 아니라 공동 학습을 통해 여러가지 스킬을 학습하는게 목표다.페어프로그래밍 방식P..
유닛테스트를 작성하는 3가지 접근방법 - Test First VS Test Last VS Test Driven 해당 글은 Unit Testing with Python: Why and When Should You Write Unit Tests? 세션의 요약본입니다 ㅎㅂㅎ. 개발할 때, 테스트 코드를 작성하는 접근 방식은 크게 3가지가 있다. Test Last 개발 다 하고, 오류가 없는지 검증하기 위한 목적으로 회귀 테스트를 작성하는 방식이다. Test Last 방식도 개발 중간에 테스트를 한다. 중간 중간에 수동테스트를 하면서, 기대한대로 코드가 동작하는지 확인한다. 테스트 케이스를 개발 이후, 마지막에 작성하는걸 선호하는 사람들이 많다. 나도 수동테스트를 할 때는, 개발을 다 하고나서 작성하는 편이다. ( 회귀 테스트란? 회귀 테스트는 한 모듈의 수정이 다른 부분에 영향을 끼칠 수도 있다고 생각하여 수정된 모듈..