CSV 파서에 대한 단위 테스트 그리고 나는 확실히 내가

CSV 파서를 단위 테스트하려면 어떤 테스트를 사용해야합니까?

나는이 간단한의 CSV 파서 C #에서, 그리고 나는 확실히 내가 모든 일반적인 (그리고 드문) 가장자리의 경우 좋은 단위 테스트 커버리지가되고 싶어요. 잠재적 문제와 경계 사례를 식별하기 위해 어떤 테스트를 사용해야합니까?



답변

방금 https://github.com/maxogden/csv-spectrum을 찾았습니다 .

CSV 파싱 라이브러리에 대한 산성 테스트로 사용되는 여러 가지 CSV 파일. 확인 목적으로 CSV 버전의 JSON도 있습니다.

이 리포지토리의 목표는 전체 CSV 스펙트럼을 나타내는 테스트 사례를 캡처하는 것입니다.


답변

다음은 생각하고 테스트해야 할 몇 가지 경계 사례입니다.

  1. 기본 필드. ,foo,
  2. 기본 인용 필드. ,"foo",
  3. 줄 바꿈이 포함 된 인용 필드. ,"foo\nbar"
  4. 쉼표가 포함 된 인용 필드. ,"foo,bar"
  5. 따옴표가있는 따옴표 필드 ,"foo""bar"
  6. 빈 문자열과 널을 구별합니까? 그렇다면 ,,null ,"",이어야하며 빈 문자열을 제공해야합니다.
  7. 데이터 유형을 감지하고 올바른 작업을 수행하려고합니까? CSV는 종종 숫자 데이터에 사용됩니다. 적절하다고 생각되는 테스트를 추가하십시오.
  8. 데이터를 쓰는 경우 위의 모든 경우를 다루어야합니다.
  9. 필드 수가 다른 라인으로 무엇을합니까? (테스트 해보십시오.)
  10. 빈 줄 끝으로 무엇을합니까? (테스트 해보십시오.)
  11. 대용량 파일의 성능은 어떻습니까? (테스트하십시오. 문자열을 비효율적으로 사용하고 결과적으로 2 차 시간이 걸리는 간단한 CSV 파서가 너무 많이 보임에 따라 간단한 항목이 고통스럽게 느려집니다.)

답변

CSV 파일에 대한 공식적인 사양은 없습니다. 그러나 대부분의 구현이 따르는 형식을 문서화하는 CSV 파일의 RFC 4180-공통 형식 및 MIME 형식 (특히 섹션 2)을 살펴보십시오.

섹션 2의 목록에서 구체적으로 다음과 같은 테스트 사례를 생성하는 것이 매우 간단 해 보입니다.

  1. 각 레코드는 줄 바꿈 (CRLF)으로 구분 된 별도의 줄에 있습니다. 예를 들면 다음과 같습니다.

    aaa, bbb, ccc CRLF zzz, yyy, xxx CRLF

  2. 파일의 마지막 레코드는 줄 바꿈이 있거나 없을 수 있습니다. 예를 들면 다음과 같습니다.

    aaa, bbb, ccc CRLF zzz, yyy, xxx

  3. 선택적인 헤더 행이 일반 레코드 행과 동일한 형식으로 파일의 첫 번째 행으로 표시 될 수 있습니다. 이 헤더는 파일의 필드에 해당하는 이름을 포함하고 나머지 파일의 레코드와 동일한 수의 필드를 포함해야합니다. MIME 유형). 예를 들면 다음과 같습니다.

    field_name, field_name, field_name CRLF aaa, bbb, ccc CRLF zzz, yyy, xxx CRLF

  4. 헤더와 각 레코드에는 쉼표로 구분 된 하나 이상의 필드가있을 수 있습니다. 각 줄은 파일 전체에서 같은 수의 필드를 포함해야합니다. 공백은 필드의 일부로 간주되므로 무시해서는 안됩니다. 레코드의 마지막 필드 뒤에 쉼표가 없어야합니다. 예를 들면 다음과 같습니다.

    aaa, bbb, ccc

  5. 각 필드는 큰 따옴표로 묶을 수 있습니다. 그러나 Microsoft Excel과 같은 일부 프로그램은 큰 따옴표를 전혀 사용하지 않습니다. 필드를 큰 따옴표로 묶지 않으면 큰 따옴표가 필드 안에 나타나지 않을 수 있습니다. 예를 들면 다음과 같습니다.

    “aaa”, “bbb”, “ccc”CRLF zzz, yyy, xxx

  6. 줄 바꿈 (CRLF), 큰 따옴표 및 쉼표가 포함 된 필드는 큰 따옴표로 묶어야합니다. 예를 들면 다음과 같습니다.

    “aaa”, “b CRLF bb”, “ccc”CRLF zzz, yyy, xxx

  7. 큰 따옴표를 사용하여 필드를 묶는 경우 다른 큰 따옴표를 앞에 두어 필드 안에 나타나는 큰 따옴표를 이스케이프해야합니다. 예를 들면 다음과 같습니다.

    “aaa”, “b” “bb”, “ccc”


답변

미국 인구 조사 데이터는 CSV로 제공됩니다

나는 한동안 그것을 위해 노력 해왔다. 좋은 시험을하기에는 틀림없이 이상합니다. 수많은 톤이 있습니다.


답변

이 디렉토리를 확인하고 * .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로 작성되었으며, 모듈 자체 테스트를위한 많은 테스트 케이스가 포함되어 있으며 모듈 설치시 수행해야합니다.