2009-11-20 5 views
3

어떻게 파일을 파싱 할 수있는 단위 테스트를 할 수 있을지 모르겠다 ... 20-1000 개의 레코드가있는 25 개의 열이있는 파일이 있다고 가정 해 봅시다. ? 이 함수는 파일을 매개 변수로 문자열로 가져오고 파일 내용이있는 DataTable을 반환합니다. ...단위 테스트 파일 파싱 루틴?

제가 생각할 수있는 최선의 방법은 4 개의 레코드 파일을 구문 분석하고 위쪽 및 아래쪽 오른쪽 모서리 만 확인하는 것입니다. ... 예. 2 상위 레코드의 처음 몇 필드와 2 맨 아래 레코드의 마지막 몇 필드 ... 파일의 모든 단일 필드에 대해 지루한 손 유형의 어설 션문을 사용하는 것을 상상할 수 없습니다. 그리고 하나의 레코드와 모든 필드를 수행하는 것은 여러 레코드 파일이나 예기치 않은 데이터의 시나리오를 설명하지 않기 때문에 약한 것처럼 보입니다.

그 당시로서는 '충분히 좋았던'것처럼 보였습니다. 그러나 이제는 10 개의 다른 소스에서 오는 다양한 PDF 파일을 구문 분석하는 새 프로젝트를 진행하고 있습니다. 각 소스는 4-6 가지 형식 그들의 파일에 대해서는 약 40-60 파싱 루틴이 필요합니다. 우리는 궁극적으로 향후 25 개의 추가 소스를 완전히 자동화 할 수 있습니다. 우리는 PDF를 가져 와서 타사 도구를 사용하여 Excel로 변환합니다. 그런 다음 출력의 패턴을 분석하고 분석하여 도구의 API를 호출하는 코드를 작성하고 Excel 파일을 추출하여 파싱합니다. 쓰레기, 다른 곳에서 데이터를 정렬하고 청소하는 등의 작업을 할 수 있습니다.

어떻게 이런 식으로 단위 테스트를 할 수 있습니까?

답변

3

나는이 문제를 완전히 이해하고 있는지 잘 모르겠다. 그러나 여기에는 하나의 아이디어가있다. 다양한 형식과 엣지 케이스를 나타내는 샘플 파일을 모으십시오. DataTable 로의 변환을 실행하고 처음에 DataTable을 수동으로 검사하여 올바른지 확인하십시오. 그런 다음 DataTable을 XML 형식으로 serialize하고 테스트 케이스 PDF 파일과 함께 유닛 테스트 스위트에 저장하십시오.

자동 단위 테스트는 PDF에서 DataTable 로의 변환을 수행하고 결과를 각각의 "승인 된"직렬화 된 DataTable 표현과 비교할 수 있습니다.

이 방법을 사용하면 시간이 지남에 따라 테스트 문서 라이브러리를 빌드 할 수 있습니다. 단위 테스트에서 실패하면 파싱 루틴의 변경으로 인해 특정 엣지 케이스가 손상되었음을 알 수 있습니다.

하나의 'catch'가 있습니다. 내 첫 번째 예제. NET 응용 프로그램에 대해 이야기하고있었습니다. 그러나이 새로운 프로젝트 은 40 개의 'scrubbing 스크립트'가 VBA ...로 작성되었습니다. 입력은 Excel 스프레드 시트이고 출력은 Excel 스프레드 시트입니다 ... 어떻게 을이 시리즈로 직렬화 할 수 있습니까? 전체 파일에서 체크섬을 수행 할 수 있습니까?

Excel 스프레드 시트가 너무 복잡하지 않은 경우 this one과 같은 셀 비교 루틴으로 셀을 만들려고 할 수 있습니다. 아마도 이것을 Assert.AreExcelWorksheetsEqual()에 랩핑 할 수 있습니다. 당신 말이 맞아요, 체크섬이 잘 작동 할 수도 있습니다.

+0

이것은 좋은 아이디어입니다. XML에 직렬화/비 직렬화를 생각하지 않았습니다. 그렇다면 전체 파일에서 모든 셀에 대해 하나의 Assert() 호출이 필요하지 않습니다. 단지 하나의 assert (또는 필요한 경우 루프)를 사용하여 일치하는지 확인하십시오 – dferraro

+0

하나의 'catch'가 있습니다. 첫 번째 예제에서는 .NET 응용 프로그램에 대해 이야기했습니다. 그러나 40 개의 '스크러빙 스크립트'가 포함 된이 새로운 프로젝트는 VBA로 작성되었습니다 .... 입력은 Excel 스프레드 시트이며 출력은 Excel 스프레드 시트입니다 ... 어떻게이 항목을 일련 번호로 지정할 수 있습니까? 파일 전체에 체크섬을 적용 할 수 있습니까? – dferraro

+0

링크가 죽었습니다 ... :( – Shanimal

2

데이터 샘플 주위에서 단위 테스트를 작성해야하는 경우 예상되는 출력 데이터의 두 번째 샘플을 사용하십시오. 10K 줄의 텍스트 또는 메가 바이트 바이너리. 그것은 중요하지 않습니다.

예상되는 입력 샘플 및 출력 데이터 테이블을 준비 할 수 있습니다. 소스 코드 옆의 파일/스크립트에 저장하십시오. 테스트에 데이터 샘플을 가져 와서 처리하고 일부 일반적인 비교 도구 또는 SQL 문을 사용하여 비트와 비트를 예상 결과와 비교하는 단계를 포함하십시오.