구글의 테스트 기준
작은 테스트
조건 1: 단 하나의 프로세스에서 실행하는 테스트. 하나의 스레드로까지 범위를 좁히기도 함
조건2: sleep. I/O 연산 사용 금지. 대신 테스트 대역(test double) 사용
테스트 스위트가 하루종일 실행하는 환경을 구축하려면 실행이 아주 빠른 속도로 완료될 수 있어야 함
ex) 유닛 테스트
중간 크기 테스트
여러 프로세스, 여러 스레드 활용 가능
로컬 호스트와 네트워크 통신 허용
적은 수의 컴포넌트 사이의 상호작용을 검증하도록 설계
서버와 데이터베이스 상호작용이 예시
ex) 통합 테스트
큰 테스트
무엇이든지 가능하지만 위험도 늘어남
여러 기기에 걸쳐 있는 시스템을 네트워크로 연결해 다루면서 느려지거나 비결정적으로 동작할 가능성이 높아짐
ex) 종단간(end-to-end) 테스트, 레거시 컴포넌트 테스트, 기능 테스트. 시스템 테스트
클래스나 메서드를 여럿 조합하여 실행했을 때 나타나는 동작 검증
구글은 되도록 작은 테스트, 좁은 범위 테스트를 추구
좋은 테스트 조건
독립적이고 반복적이어야 함
플랫폼에 제한이 없어야 하고 재사용이 가능해야 함
테스트 실패했을 때 문제에 대해 가능한 많은 정보를 제공해야 함
단일 실행 - 수정 - 컴파일사이클 안에서 여러 개의 버그를 발견하고 수정 가능해야 함
빨라야 함
자동으로 추적 가능하고 사용자가 실행하기 위해 따로 열거하지 않아야 됨
구글테스트 프레임워크 소개
Assertions
구글테스트의 assertion들은 함수 호출과 비슷한 매크로들
EXPECT_*
치명적이지 않은 assertion
assertion을 통과하지 못하더라도 테스트는 계속 진행
ASSERT_*
치명적인 assertion
assertion을 통과하지 못하면 테스트는 강제 종료됨
Strings
대/소문자 구분
{ASSERT | EXPECT}_STREQ(str1, str2);
{ASSERT | EXPECT}_STRNE(str1, str2);
대/소문자 무시
{ASSERT | EXPECT}_STRCASEEQ(str1, str2);
{ASSERT | EXPECT}_STRCASENE(str1, str2);
Double 및 floating point 값들
{ASSERT | EXPECT}_FLOAT_EQ(expected, actual);
{ASSERT | EXPECT}_DOUBLE_EQ(expected, actual);
{ASSERT | EXPECT}_NEAR(expected, actual, absolute_range);
ex)