testing

4 posts

테스트, 코드, 산문을 하나의 Markdown 파일에 담아 문서에 코드를 복사하는 것을 그만뒀다

Literate programming은 Markdown 파일을 single source of truth로 삼아 문서, 테스트, 구현체를 동기화 상태로 유지한다. Python 30줄로 구현하는 방법을 소개한다.

당신의 문서, 테스트, 코드는 동일한 이야기를 제대로 전달하지 못하는 세 개의 파일이다. 소스의 함수 시그니처를 업데이트한다. README 예제를 잊는다. 일주일 후, 신입 사원이 오래된 스니펫을 프로덕션에 복사한다. 테스트 파일은 여전히 예전 동작을 예상 결과로 인코딩하고 있다.…

race condition이 나타나기를 기다리는 것은 끔찍한 테스트 전략이다

model checking이 며칠간의 프로덕션 런타임을 능가해 concurrency 버그를 찾는 이유, 그리고 자신의 코드에 적용하는 방법.

프로덕션에서 race condition이 떠오르기를 기다리는 건 테스트가 아니다. 성실함으로 위장한 희망이다. 앱을 몇 주씩 돌리고 metrics 대시보드를 지켜봐도, 두 개의 request가 정확히 동일한 cache eviction window에 걸릴 때만 발동하는…

유닛 테스트는 통과하는데, 데이터는 여전히 사라진다

모의 데이터베이스 테스트는 SQL 문법은 검증하지만, 행이 크래시나 동시 쓰기, 스키마 불일치에서 살아남는지는 검증하지 않는다. 여기 지속성을 진짜로 테스트하는 방법이 있다.

테스트에서 데이터베이스를 모킹하면, 리포지토리 레이어가 올바른 메서드를 호출하는지 검증하는 것이다. 데이터가 크래시에서 살아남는지, 고유 제약 조건이 실제로 중복을 차단하는지, 또는 트랜잭션이 실패할 때 롤백되는지는 테스트하지 않는다. 이 차이는 중요하다. 모킹된 는 지시한 대로…

모든 mock action에 매몰리지 않고 Redux 테스트하기

모든 Redux action을 mock하면 테스트가 변경 로그 검증기가 된다. 대신 실제 상태 전환으로 store를 테스트하는 방법.

가 정확한 payload 형태로 호출되었는지 검증하는 테스트를 작성한 적이 있다면, 누군가 상수 이름을 바꿀 때마다 깨지는 테스트를 작성한 것이다. 이건 상태 로직을 테스트하는 게 아니다. 손가락이 올바른 문자열을 입력했는지 테스트하는 것이다. Redux 테스트 튜토리얼은 종종…