Có ai có kinh nghiệm với công cụ tạo chuỗi kiểm tra từ ngữ pháp BNF mà sau đó có thể được đưa vào thử nghiệm đơn vị không?Trường hợp thử nghiệm ngữ pháp BNF thế hệ
Trả lời
Tôi không có câu trả lời cho câu hỏi công cụ, nhưng tôi sẽ nói nó khá dễ dàng trong bất kỳ ngôn ngữ xử lý văn bản nào (perl/python/etc) để tạo ngẫu nhiên các câu từ ngữ pháp BNF. một ngôn ngữ lớn hơn (Java/C/etc), nhưng nó không phải là quá khó để cuộn của riêng bạn.
Vấn đề với điều này, tất nhiên, là nó chỉ có thể tạo chuỗi trong ngữ pháp, và trừ khi ngữ pháp của bạn rất đơn giản, không gian kiểm tra là vô cùng lớn.
Tôi đã thực hiện chính xác như nhận xét của Hazzen (sử dụng DSL nhúng trong ngôn ngữ kịch bản lệnh). Đó là một bài tập nhẹ nhàng thú vị, nhưng ngoại trừ các bài kiểm tra cơ bản nhất, ví dụ: phân tích cú pháp, nó không hữu ích khủng khiếp. Hầu hết các bài kiểm tra thú vị nhất của tôi phải làm với các mối quan hệ phức tạp hơn là có thể dễ dàng diễn tả trong BNF (hoặc bất kỳ ngữ pháp ngữ cảnh nào khác).
Nếu, giả sử bạn đang phát triển trình biên dịch, thì bạn có thể có kiểu dữ liệu cây cú pháp trừu tượng. Nếu có, thì bạn có thể viết một hàm để tạo ra một AST ngẫu nhiên - với điều đó, bạn có thể in nó thành một chuỗi và nạp nó vào thử nghiệm đơn vị của bạn. Nó được đảm bảo là một chương trình hợp lệ theo cách này, vì bạn đã bắt đầu với AST của mình.
Nếu tôi đang viết trình biên dịch trong Haskell hoặc ML, đây là những gì tôi sẽ làm, sử dụng QuickCheck.
- 1. Tôi có thể tìm ngữ pháp BNF hoặc YACC chuẩn cho ngôn ngữ C++ ở đâu?
- 2. Hệ thống tập tin giả trong thử nghiệm tích hợp
- 3. Bất kỳ BNF IDE nào có các tính năng thử nghiệm
- 4. Tích hợp các trường hợp thử nghiệm PHPT với PHPUnit
- 5. Trường hợp thử nghiệm riêng biệt trên nhiều tệp trong thử nghiệm google
- 6. Chạy thử nghiệm với hơn một triệu trường hợp thử nghiệm
- 7. Ghi thử nghiệm Selen cho các trường hợp thử nghiệm Plone chức năng
- 8. TDD: Có hợp lý để thử nghiệm tích hợp, nhưng không có thử nghiệm đơn vị?
- 9. Cách đặt chuỗi trường hợp thử nghiệm trong xUnit
- 10. Máy phát hiện trường hợp thử nghiệm đơn vị
- 11. Trường hợp thử nghiệm junit máy phát điện
- 12. Phương pháp thử nghiệm
- 13. Làm thế nào để ngăn chặn 'quá thử nghiệm' trong một trường hợp thử nghiệm? (C#/nUnit)
- 14. Trường hợp thử nghiệm GWT không chạy: JUnitFatalLaunchException
- 15. Scalatest hoặc specs2 với nhiều trường hợp thử nghiệm
- 16. Trường hợp thử nghiệm Spring JUnit không thành công
- 17. Các trường hợp thử nghiệm với JIRA hoặc Confluence
- 18. Sau khi chạy thử trường hợp junit, tôi có nên xóa dữ liệu thử nghiệm liên quan đến trường hợp thử nghiệm này không?
- 19. làm thế nào để tổ chức các trường hợp thử nghiệm với boost :: test library?
- 20. Làm thế nào để chạy một trường hợp thử nghiệm duy nhất từ MSTest
- 21. Làm thế nào để bạn tích hợp thử nghiệm hệ thống vào một quy trình nhanh?
- 22. hệ thống thử nghiệm đơn vị.timers.timer
- 23. Trong Eclipse, làm thế nào để chạy một trường hợp thử nghiệm JUnit nhiều lần
- 24. Làm thế nào để quản lý các trường hợp thử nghiệm bằng cách sử dụng Confluence?
- 25. JUnit 4: Thiết lập mọi thứ trong một bộ thử trước khi chạy thử nghiệm (như phương pháp @BeforeClass của thử nghiệm, chỉ dành cho bộ thử nghiệm)
- 26. Làm thế nào để đặt biến môi trường hoặc thuộc tính hệ thống trong các thử nghiệm mùa xuân?
- 27. Twitter Môi trường thử nghiệm Bootstrap
- 28. Xây dựng thử nghiệm Môi trường Citrix
- 29. Ngữ pháp tổng hợp
- 30. Tổng hợp nhiều trường hợp thử nghiệm từ nhiều mô-đun để chạy trong PyDev TestRunner