CSV 파서를 단위 테스트하려면 어떤 테스트를 사용해야합니까?
나는이 간단한의 CSV 파서 C #에서, 그리고 나는 확실히 내가 모든 일반적인 (그리고 드문) 가장자리의 경우 좋은 단위 테스트 커버리지가되고 싶어요. 잠재적 문제와 경계 사례를 식별하기 위해 어떤 테스트를 사용해야합니까?
답변
방금 https://github.com/maxogden/csv-spectrum을 찾았습니다 .
CSV 파싱 라이브러리에 대한 산성 테스트로 사용되는 여러 가지 CSV 파일. 확인 목적으로 CSV 버전의 JSON도 있습니다.
이 리포지토리의 목표는 전체 CSV 스펙트럼을 나타내는 테스트 사례를 캡처하는 것입니다.
답변
다음은 생각하고 테스트해야 할 몇 가지 경계 사례입니다.
- 기본 필드.
,foo,
- 기본 인용 필드.
,"foo",
- 줄 바꿈이 포함 된 인용 필드.
,"foo\nbar"
- 쉼표가 포함 된 인용 필드.
,"foo,bar"
- 따옴표가있는 따옴표 필드
,"foo""bar"
- 빈 문자열과 널을 구별합니까? 그렇다면
,,
null,"",
이어야하며 빈 문자열을 제공해야합니다. - 데이터 유형을 감지하고 올바른 작업을 수행하려고합니까? CSV는 종종 숫자 데이터에 사용됩니다. 적절하다고 생각되는 테스트를 추가하십시오.
- 데이터를 쓰는 경우 위의 모든 경우를 다루어야합니다.
- 필드 수가 다른 라인으로 무엇을합니까? (테스트 해보십시오.)
- 빈 줄 끝으로 무엇을합니까? (테스트 해보십시오.)
- 대용량 파일의 성능은 어떻습니까? (테스트하십시오. 문자열을 비효율적으로 사용하고 결과적으로 2 차 시간이 걸리는 간단한 CSV 파서가 너무 많이 보임에 따라 간단한 항목이 고통스럽게 느려집니다.)
답변
CSV 파일에 대한 공식적인 사양은 없습니다. 그러나 대부분의 구현이 따르는 형식을 문서화하는 CSV 파일의 RFC 4180-공통 형식 및 MIME 형식 (특히 섹션 2)을 살펴보십시오.
섹션 2의 목록에서 구체적으로 다음과 같은 테스트 사례를 생성하는 것이 매우 간단 해 보입니다.
각 레코드는 줄 바꿈 (CRLF)으로 구분 된 별도의 줄에 있습니다. 예를 들면 다음과 같습니다.
aaa, bbb, ccc CRLF zzz, yyy, xxx CRLF
파일의 마지막 레코드는 줄 바꿈이 있거나 없을 수 있습니다. 예를 들면 다음과 같습니다.
aaa, bbb, ccc CRLF zzz, yyy, xxx
선택적인 헤더 행이 일반 레코드 행과 동일한 형식으로 파일의 첫 번째 행으로 표시 될 수 있습니다. 이 헤더는 파일의 필드에 해당하는 이름을 포함하고 나머지 파일의 레코드와 동일한 수의 필드를 포함해야합니다. MIME 유형). 예를 들면 다음과 같습니다.
field_name, field_name, field_name CRLF aaa, bbb, ccc CRLF zzz, yyy, xxx CRLF
헤더와 각 레코드에는 쉼표로 구분 된 하나 이상의 필드가있을 수 있습니다. 각 줄은 파일 전체에서 같은 수의 필드를 포함해야합니다. 공백은 필드의 일부로 간주되므로 무시해서는 안됩니다. 레코드의 마지막 필드 뒤에 쉼표가 없어야합니다. 예를 들면 다음과 같습니다.
aaa, bbb, ccc
각 필드는 큰 따옴표로 묶을 수 있습니다. 그러나 Microsoft Excel과 같은 일부 프로그램은 큰 따옴표를 전혀 사용하지 않습니다. 필드를 큰 따옴표로 묶지 않으면 큰 따옴표가 필드 안에 나타나지 않을 수 있습니다. 예를 들면 다음과 같습니다.
“aaa”, “bbb”, “ccc”CRLF zzz, yyy, xxx
줄 바꿈 (CRLF), 큰 따옴표 및 쉼표가 포함 된 필드는 큰 따옴표로 묶어야합니다. 예를 들면 다음과 같습니다.
“aaa”, “b CRLF bb”, “ccc”CRLF zzz, yyy, xxx
큰 따옴표를 사용하여 필드를 묶는 경우 다른 큰 따옴표를 앞에 두어 필드 안에 나타나는 큰 따옴표를 이스케이프해야합니다. 예를 들면 다음과 같습니다.
“aaa”, “b” “bb”, “ccc”
답변
나는 한동안 그것을 위해 노력 해왔다. 좋은 시험을하기에는 틀림없이 이상합니다. 수많은 톤이 있습니다.
답변
이 디렉토리를 확인하고 * .t 파일의 코드를보십시오. :
http://cpansearch.perl.org/src/MAKAMAKA/Text-CSV-1.32/t/
(버전 번호 -1.32는 결국 변경되어 링크가 “죽음”이 될 수 있습니다. 시행 착오를 통해 버전 번호를 직접 늘리거나 상위 디렉토리로 이동하거나 여기를 클릭하십시오
https://metacpan.org/pod/Text::CSV
“찾아보기”를 통해 최신 버전의 소스 코드를 통해 클릭하십시오.)
Text :: CSV_XS는 CSV 파일을 구문 분석하기위한 성숙한 펄 모듈입니다. * .t 파일은 Perl 5로 작성되었으며, 모듈 자체 테스트를위한 많은 테스트 케이스가 포함되어 있으며 모듈 설치시 수행해야합니다.