비트 벡터와 같은 간단한 것을 개발하기 위해 TDD를 사용하려고합니다. Swift를 사용하고 있지만 언어에 구애받지 않는 질문입니다.
My BitVector
은 struct
single을 저장 UInt64
하고 컬렉션처럼 취급 할 수있는 API를 제공합니다. 세부 사항은별로 중요하지 않지만 매우 간단합니다. 상위 57 비트는 스토리지 비트이고 하위 6 비트는 "카운트"비트이며 실제로 얼마나 많은 스토리지 비트가 포함 된 값을 저장하는지 알려줍니다.
지금까지 몇 가지 매우 간단한 기능이 있습니다.
- 빈 비트 벡터를 구성하는 이니셜 라이저
count
유형 의 속성Int
isEmpty
유형 의 속성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
서로 의미있는 테스트를 수행해야하는 문제를 즉시 해결합니다 .