비트 벡터와 같은 간단한 것을 개발하기 위해 TDD를 사용하려고합니다. Swift를 사용하고 있지만 언어에 구애받지 않는 질문입니다.
My BitVector은 structsingle을 저장 UInt64하고 컬렉션처럼 취급 할 수있는 API를 제공합니다. 세부 사항은별로 중요하지 않지만 매우 간단합니다. 상위 57 비트는 스토리지 비트이고 하위 6 비트는 "카운트"비트이며 실제로 얼마나 많은 스토리지 비트가 포함 된 값을 저장하는지 알려줍니다.
지금까지 몇 가지 매우 간단한 기능이 있습니다.
- 빈 비트 벡터를 구성하는 이니셜 라이저
count유형 의 속성IntisEmpty유형 의 속성Bool- 항등 연산자 (
==) 주의 : 이것은Object.equals()자바 와 비슷한 가치 평등 연산자 이며,==자바 와 같은 참조 평등 연산자가 아닙니다 .
나는 주기적으로 많은 의존성을 겪고 있습니다.
이니셜 라이저를 테스트하는 단위 테스트는 새로 생성되었는지 확인해야합니다
BitVector. 다음 세 가지 방법 중 하나로 수행 할 수 있습니다.- 검사
bv.count == 0 - 검사
bv.isEmpty == true - 확인
bv == knownEmptyBitVector
방법 1에 의존하고
count, 방법 2에 의존하고isEmpty(자체에 의존count하므로 사용하지 않아도 됨) 방법 3에 의존합니다==. 어쨌든 초기화 프로그램을 독립적으로 테스트 할 수 없습니다.- 검사
에 대한 테스트
count는 필연적으로 내 초기화 프로그램을 테스트하는 무언가에서 작동해야합니다.의 구현에
isEmpty의존count의 구현은에
==의존합니다count.
BitVector기존 비트 패턴 ( UInt64) 을 구성하는 개인 API를 도입하여이 문제를 부분적으로 해결할 수있었습니다 . 이를 통해 다른 이니셜 라이저를 테스트하지 않고 값을 초기화 할 수 있었으므로 "부트 스트랩"할 수있었습니다.
단위 테스트가 실제로 단위 테스트가 되려면 많은 해킹을 수행하여 제품 코드와 테스트 코드를 상당히 복잡하게 만듭니다.
이런 종류의 문제를 정확히 어떻게 해결합니까?
BitVector는 단위 테스트를위한 완벽한 단위 크기이며 공개 구성원이BitVector서로 의미있는 테스트를 수행해야하는 문제를 즉시 해결합니다 .