kiểm tra đơn vị cho trình phân tích cú pháp csv


14

Tôi nên sử dụng thử nghiệm nào để kiểm tra đơn vị phân tích cú pháp csv?

Tôi có một trình phân tích cú pháp csv đơn giản trong C # và tôi muốn chắc chắn rằng tôi có phạm vi kiểm tra đơn vị tốt của tất cả các trường hợp cạnh phổ biến (và không phổ biến). Những xét nghiệm nào tôi nên sử dụng để xác định các vấn đề tiềm ẩn và các trường hợp ranh giới?


5
Bạn đã kiểm tra createdata.com để tạo các tệp thử nghiệm khác nhau chưa?
Aaron McIver

@Aaron - các bài kiểm tra tốt có thể lặp lại và do đó không sử dụng dữ liệu khác nhau. Nhưng có lẽ tôi có thể sử dụng chúng cho thế hệ một lần mà sau đó tôi lưu lại cho bộ thử nghiệm. Nhưng ngay cả khi đó, tôi muốn chắc chắn rằng tôi đã bao gồm tất cả các trường hợp cạnh khác nhau, điều mà ngẫu nhiên không được đảm bảo.
Joel Coehoorn

Coehorn Kết quả kiểm tra tốt là lặp lại. Tôi cho rằng việc sử dụng dữ liệu thay đổi là tốt miễn là kết quả mong muốn không đổi. Nếu bạn muốn chắc chắn rằng bạn đã bao gồm tất cả các trường hợp cạnh khác nhau (dựa trên nhận xét của bạn, bạn có vẻ chắc chắn đó là gì) tại sao không bắt đầu viết bài kiểm tra? Bạn sẽ dành nhiều thời gian hơn để tìm kiếm một giải pháp kỳ diệu sau đó chỉ cần viết các bài kiểm tra.
Aaron McIver

Tác giả đang tìm kiếm các trường hợp thử nghiệm, không phải dữ liệu thử nghiệm. Tôi ước tôi biết nơi để tìm các bài kiểm tra công cộng cho những thứ khác nhau, quá.
ProdigySim

Câu trả lời:


6

Tôi vừa tìm thấy https://github.com/maxogden/csv-spectrum :

Một loạt các tệp CSV khác nhau để phục vụ dưới dạng kiểm tra axit cho các thư viện phân tích cú pháp CSV. Ngoài ra còn có các phiên bản JSON của CSV cho mục đích xác minh.

Mục tiêu của kho lưu trữ này là để nắm bắt các trường hợp thử nghiệm để thể hiện toàn bộ phổ CSV.


Thật thú vị khi trình phân tích cú pháp csv của chính GitHub đã thất bại trong các bài kiểm tra khi cố gắng hiển thị CSV thử nghiệm ( github.com/maxogden/csv-spectrum/blob/master/csvs/ tựa )
Ian Boyd

16

Dưới đây là một vài trường hợp ranh giới mà bạn nên nghĩ qua và có các trường hợp thử nghiệm.

  1. Lĩnh vực cơ bản. ,foo,
  2. Trường trích dẫn cơ bản. ,"foo",
  3. Trường trích dẫn với dòng mới nhúng. ,"foo\nbar"
  4. Trường trích dẫn với dấu phẩy nhúng. ,"foo,bar"
  5. Trường trích dẫn với trích dẫn nhúng. ,"foo""bar"
  6. Bạn có phân biệt giữa chuỗi rỗng và null? Nếu bạn làm thì ,,nên là null và ,"",sẽ cung cấp một chuỗi rỗng.
  7. Bạn có cố gắng phát hiện các loại dữ liệu và làm điều đúng không? CSV thường được sử dụng cho dữ liệu số. Thêm bất cứ bài kiểm tra nào bạn nghĩ phù hợp cho việc đó.
  8. Nếu bạn viết dữ liệu, bạn nên bao gồm tất cả các trường hợp trên.
  9. Bạn làm gì với các dòng có số lượng trường khác nhau? (Kiểm tra nó.)
  10. Bạn làm gì với dấu trống dòng? (Kiểm tra nó.)
  11. Làm thế nào là hiệu suất trên một tập tin lớn? (Thử nghiệm

10

Không có thông số kỹ thuật chính thức cho các tệp CSV. Tuy nhiên, hãy xem RFC 4180 - Các loại MIME và Định dạng chung cho các tệp CSV , (đặc biệt là Phần 2), tài liệu định dạng dường như được tuân theo bởi hầu hết các triển khai.

Có vẻ khá đơn giản để bắt đầu tạo một số trường hợp thử nghiệm từ danh sách trong phần 2, cụ thể:

  1. Mỗi bản ghi được đặt trên một dòng riêng biệt, được phân cách bằng dấu ngắt dòng (CRLF). Ví dụ:

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

  2. Bản ghi cuối cùng trong tệp có thể có hoặc không có ngắt dòng kết thúc. Ví dụ:

    aaa, bbb, ccc CRLF zzz, yyy, xxx

  3. Có thể có một dòng tiêu đề tùy chọn xuất hiện dưới dạng dòng đầu tiên của tệp có cùng định dạng với các dòng bản ghi thông thường. Tiêu đề này sẽ chứa các tên tương ứng với các trường trong tệp và phải chứa cùng số lượng các trường như các bản ghi trong phần còn lại của tệp (sự hiện diện hay vắng mặt của dòng tiêu đề phải được chỉ định thông qua tham số "tiêu đề" tùy chọn này Loại MIME). Ví dụ:

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

  4. Trong tiêu đề và mỗi bản ghi, có thể có một hoặc nhiều trường, được phân tách bằng dấu phẩy. Mỗi dòng nên chứa cùng một số trường trong toàn bộ tệp. Không gian được coi là một phần của một lĩnh vực và không nên bỏ qua. Trường cuối cùng trong bản ghi không được theo sau dấu phẩy. Ví dụ:

    aaa, bbb, ccc

  5. Mỗi trường có thể hoặc không được đặt trong dấu ngoặc kép (tuy nhiên một số chương trình, chẳng hạn như Microsoft Excel, hoàn toàn không sử dụng dấu ngoặc kép). Nếu các trường không được đặt trong dấu ngoặc kép, thì dấu ngoặc kép có thể không xuất hiện bên trong các trường. Ví dụ:

    "Aaa", "bbb", "ccc" CRLF zzz, yyy, xxx

  6. Các trường có chứa dấu ngắt dòng (CRLF), dấu ngoặc kép và dấu phẩy phải được đặt trong dấu ngoặc kép. Ví dụ:

    "Aaa", "b CRLF bb", "ccc" CRLF zzz, yyy, xxx

  7. Nếu dấu ngoặc kép được sử dụng để bao quanh các trường, thì dấu ngoặc kép xuất hiện bên trong một trường phải được thoát bằng cách đặt trước nó bằng dấu ngoặc kép khác. Ví dụ:

    "aaa", "b" "bb", "ccc"


8

Dữ liệu điều tra dân số Hoa Kỳ có sẵn trong CSV

Tôi đã làm việc trên một thời gian. Nó chắc chắn đủ kỳ lạ để trở thành một bài kiểm tra tốt, và có rất nhiều tấn.


bạn có phiền giải thích thêm về những gì nó làm không và tại sao bạn lại đề nghị nó như trả lời câu hỏi được hỏi? "Câu trả lời chỉ liên kết" không hoàn toàn được chào đón tại Stack Exchange
gnat

4

Kiểm tra thư mục này và xem mã trong các tệp * .t.:

http://cpansearch.perl.org/src/MAKAMAKA/Text-CSV-1.32/t/

(Số phiên bản -1.32 cuối cùng có thể thay đổi để liên kết có thể bị "chết". Tự tăng số phiên bản bằng cách dùng thử và lỗi hoặc vào thư mục mẹ hoặc nhấp vào đây

https://metacpan.org/pod/Text::CSV

và nhấp qua "Duyệt" tới mã nguồn của phiên bản mới nhất)

Văn bản :: CSV_XS là mô-đun perl trưởng thành để phân tích tệp csv. Các tệp * .t được viết bằng Perl 5, chúng chứa rất nhiều testcase để tự kiểm tra mô-đun, chúng sẽ được thực hiện khi cài đặt mô-đun.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.