2013-10-12 16 views
7

Tôi thường sẽ thực hiện các chức năng và sẽ viết các bài kiểm tra đơn vị cho chúng. nhưng đối với các macro thực hiện chuyển đổi mã, làm cách nào để áp dụng logic của macthing giá trị dự kiến ​​và thực tế?Có chiến lược kiểm tra macro trong Clojure không?

vì đầu vào cho macro sẽ là mã và đầu ra cũng sẽ là mã. điều này có vẻ rất năng động với tôi để có thể đưa ra một số chiến lược để kiểm tra.

Hoặc tôi có thể sử dụng đầu vào mẫu cho macro và chuyển biểu thức thành macroexpand-1 và khớp với đầu ra với macro mong muốn?

+3

Tôi đã trả lời một câu hỏi rất giống ở đây: http://stackoverflow.com/questions/16329109/is-there-a-tool-function-that-can-be-used-to-compare-patterns-macro -forms/16329164 # 16329164 - hy vọng nó sẽ giúp. – leonardoborges

Trả lời

1

Tôi nghĩ rằng có giá trị trong cả hai ví dụ.

Đối với các macro kiểu thay thế nhỏ, bạn có thể thử nghiệm dạng mở rộng của một vài ví dụ. Thử nghiệm các khuôn khổ như Midje giúp đỡ với điều đó, nó có an =expands-to=> checker.

Nhưng đối với các ví dụ phức tạp hơn, biểu mẫu mở rộng thường thay đổi nhanh chóng trong quá trình phát triển theo những cách nhỏ mà không bao giờ làm cho việc kiểm tra biểu mẫu mở rộng trở nên rất giòn. Trong các ví dụ này, tôi thường tạo các trường hợp thử nghiệm xung quanh việc sử dụng cụ thể của macro.

0

này:

Hoặc tôi có thể sử dụng một đầu vào mẫu vĩ mô, và vượt qua các biểu thức để macroexpand-1 và phù hợp với sản lượng với một dự kiến?

Bạn nên bắt đầu viết macro của mình bằng cách viết kết quả đầu ra bạn mong đợi, vì vậy bạn nên có một ví dụ đã có sẵn.

Bạn cũng có thể kiểm tra mã xuất phát từ macro và xác minh rằng mã hoạt động như mong đợi, giống như bạn sẽ thử nghiệm một hàm.

Các vấn đề liên quan