Có một số cách để tạo dữ liệu cho các bài kiểm tra (không chỉ các bài kiểm tra đơn vị), ví dụ: Mẹ đối tượng, người xây dựng, v.v. Một cách tiếp cận hữu ích khác là ghi dữ liệu thử nghiệm dưới dạng văn bản thuần túy:DSL để tạo dữ liệu thử nghiệm
product: Main; prices: 145, 255; Expire: 10-Apr-2011; qty: 2; includes: Sub product: Sub; prices: 145, 255; Expire: 10-Apr-2011; qty: 2
rồi phân tích cú pháp thành đối tượng C#. Điều này rất dễ sử dụng trong các bài kiểm tra đơn vị (vì các bộ sưu tập bên trong sâu có thể được viết bằng một dòng), điều này thậm chí còn thuận tiện hơn khi sử dụng trong hệ thống FitNesse (vì DSL này tự nhiên phù hợp với wiki), v.v.
Vì vậy, tôi sử dụng tính năng này và viết trình phân tích cú pháp, nhưng thật là tẻ nhạt khi viết mỗi lần. Tôi không phải là chuyên gia lớn về phân tích cú pháp DSL/ngôn ngữ, nhưng tôi nghĩ rằng họ có thể trợ giúp ở đây. Điều gì sẽ là một trong những quyền sử dụng? Tôi chỉ nghe nói về:
- DSL (Ý tôi là, bất kỳ DSL)
- Boo (mà tôi nghĩ rằng có thể làm DSL)
- ANTLR
nhưng tôi thậm chí không biết cái nào để chọn và bắt đầu từ đâu.
Vì vậy, câu hỏi: có hợp lý để sử dụng một số loại DSL để tạo dữ liệu thử nghiệm không? Bạn sẽ gợi ý làm gì? Có bất kỳ trường hợp hiện tại nào không?
Cập nhật: có vẻ như tôi chưa đủ rõ ràng. Nó không phải về chuỗi thô để phản đối sự hội tụ. Nhìn vào dòng đầu tiên và liên kết nó với
var main = Product.New("Main")
.AddPrice(Price.New(145).WithType(PriceType.Main).AndQty(2))
.AddPrice(Price.New(255).WithType(PriceType.Maintenance).AndQty(2))
.Expiration(new DateTime(10, 04, 2011));
var sub = Product
.New("Sub").Parent(main)
.AddPrice(...));
main.AddSubProduct(sub);
products.Add(main);
products.Add(sub);
Và lưu ý rằng trước tiên tôi tạo sản phẩm phụ và sau đó thêm sản phẩm phụ vào chính, mặc dù được liệt kê theo thứ tự ngược lại. Giá cả được xử lý một cách đặc biệt. Tôi muốn chỉ định tên của sản phẩm phụ và nhận được tham chiếu đến nó - tạo ra. Tôi muốn liệt kê tất cả các thuộc tính sản phẩm - FLAT và KHÔNG CHẤP NHẬN - trên một dòng. Tôi muốn sử dụng giá trị mặc định cho thuộc tính. Và cứ thế.
Cập nhật: Tôi không bị thuyết phục tránh DSL vì tất cả các ví dụ thay thế quá dài và không thân thiện với người dùng. Và không ai nói gì hữu ích về DSL.
Nó tiết lộ chi tiết hơn, đặc biệt nếu bạn thêm rằng giá không chỉ là ints, và bao gồm không phải là chuỗi nhưng tham chiếu đến các sản phẩm khác (xem cập nhật). Tôi muốn viết "giá: 145, 255" và trình phân tích cú pháp nên biết rằng đầu tiên là giá sản phẩm chính và thứ hai là giá sản phẩm bảo trì. Mà không viết những chi tiết này mỗi lần. – queen3
Và nếu tôi viết "giá: 145", trình phân tích cú pháp phải đủ thông minh để đặt cả giá thành cùng một giá trị. Hoặc, có thể, bảo trì như một nửa giá. Nếu bạn thêm các chi tiết như vậy, bạn sẽ thấy cần DSL. – queen3
@ queen3: Về bình luận đầu tiên của bạn, tôi đồng ý; cho dù một DSL là giá trị nó đi xuống đến ngưỡng đau của riêng bạn cho tiếng ồn dòng. Tuy nhiên, điểm thứ hai của bạn không chính xác; setter cho 'TestProduct.prices' có thể dễ dàng xem liệu một hoặc hai giá đã được cung cấp và áp dụng lựa chọn các quy tắc của bạn cho phù hợp hay không. –