2012-07-02 31 views
5

Tôi có một số chức năng với tập tin kịch bản, setup.fsx Tôi muốn kiểm tra các tệp đó. xUnit và các lượt thích cần các chức năng được kiểm tra để trở thành một phần của hội đồng.Viết các bài kiểm tra cho các tập tin kịch bản trong F #

Vì vậy, tôi đang nghĩ đến việc đổi tên tập lệnh của tôi từ tiện ích setup.fsx thành setup.fs, sau đó tải tệp từ một tệp tập lệnh khác. Nhưng sau đó kịch bản của tôi phụ thuộc vào

#r "System.Xml" 
#r "System.Xml.Linq" 

mà tôi sau đó sẽ phải chỉ định trong kịch bản gọi điện thoại (cách xa nơi phụ thuộc thực sự phát sinh)

Có anyway để tích hợp các xét nghiệm dựa trên các kịch bản trong worflow xUnit ? Tổ chức nào được đề xuất để viết các bài kiểm tra cho tệp tập lệnh?

(có thể chúng ta cần một phần mở rộng visual studio cho các bài kiểm tra trong các kịch bản và không có trong lắp ráp ..)

Trả lời

2

Thậm chí nếu bạn chỉ cần thêm fsx kịch bản để Visual Studio, bạn vẫn có thể biên dịch setup.fsx vào một dự án bình thường cùng với các tệp khác (có thể là fs), vì vậy bạn có thể giữ tập lệnh dưới dạng tệp tập lệnh bình thường trong Visual Studio và đồng thời tham chiếu nó từ một dự án hoặc từ công cụ dòng lệnh để tạo các thử nghiệm của bạn.

Tôi đã cố gắng làm điều đó với test.fsx tập tin sau đây:

module Demo 
#r "System.Xml.Linq.dll" 
open System.Xml.Linq 

let test() = 
    let d = XDocument(XElement(XName.Get("foo"))) 
    d.ToString() 

Bạn chắc chắn cần một số module Name khai ngay từ đầu (để bạn có thể truy cập vào các chức năng từ các tập tin khác), nhưng nếu không nó có thể là bất kỳ tập tin fsx . Tệp khác mà tôi đã sử dụng là test.fs:

module Main 
open Demo  
test() |> printfn "%A" 

Đây chỉ là để thử nghiệm, nhưng ở đây bạn có thể viết các bài kiểm tra đơn vị của mình. Nếu bạn biên dịch các tập tin với lệnh sau đây, bạn sẽ có được lắp ráp tiêu chuẩn mà bạn có thể vượt qua để xUnit (lưu ý, trình biên dịch có thể chọn thẻ #r từ test.fsx, chúng tôi không phải viết tài liệu tham khảo một cách rõ ràng):

fsc.exe --target:library test.fsx test.fs 

Tôi nghĩ bạn có thể có cùng cấu hình trong Visual Studio nếu bạn thêm dự án thư viện và sau đó thêm liên kết vào tệp (có thể trỏ đến tệp ở nơi khác trong cấu trúc giải pháp của bạn) bằng cách sử dụng một cái gì đó như thế này trong tệp fsproj:

<Compile Include="..\Eslewhere\In\Your\Project\Tree\File.fsx"> 
    <Link>File.fsx</Link> 
</Compile> 

Lưu ý rằng khi bạn thêm fsx tập tin bằng cách sử dụng "Thêm mục", nó được đánh dấu là "Bao gồm" nhưng không phải là "Biên dịch", do đó, nó không được biên dịch như là một phần của dự án. Ở trên nên bao gồm nó trong dự án và nó sẽ cho trình biên dịch để bao gồm nó trong hội đồng biên dịch quá.

Cảnh báo: nói rằng, tôi nghĩ tốt hơn nên kiểm tra các tệp dll được biên dịch bằng các thử nghiệm đơn vị tiêu chuẩn. Nếu bạn muốn thử nghiệm các tệp fsx, tôi sẽ chỉ thêm một vài dòng làm thử nghiệm ở cuối và chạy chúng bằng tay (chọn, Alt + Enter). Lý do là các tệp fsx được cho là thay đổi khá thường xuyên và vì vậy việc thử nghiệm quá vững chắc có thể hạn chế tính linh hoạt của bạn. Mặt khác, khi mã trở nên chắc chắn hơn, bạn nên chuyển nó sang tệp dll.

+2

nếu bạn viết mô-đun trên đầu trang trong fsx, bạn không thể thực thi nó trong fsi. thêm #if COMPILED mô-đun Demo #endif có vẻ ok – nicolas

+0

Bạn có chắc là bạn có quyền truy cập vào không gian tên Demo khi được xác định trong tệp fsx không? Tôi gặp lỗi. tệp fsx ở trên trong danh sách dự án .. lỗi biến mất khi đổi tên thành fs, xuất hiện chuyển về fsx – nicolas

+0

@nicolas Tôi chỉ cố chạy trình biên dịch bằng tay từ dòng lệnh. Tôi nghĩ rằng nó sẽ chỉ hoạt động nếu tệp 'fsx' được đánh dấu là Biên dịch - lệnh dòng lệnh mà Visual Studio in trong cửa sổ" Output "là gì? Bạn có thấy tập tin 'fsx' therE không? –

0

Tôi nghĩ giải pháp dễ nhất là lấy mã bạn muốn thử nghiệm và đặt mã vào một tệp riêng biệt *.fs. Trong tập lệnh *.fsx, bạn có thể sử dụng chỉ thị #load để tải mã từ tệp *.fs (#load hoạt động như #include trong C/C++).

Để kiểm tra đơn vị, bạn có thể tạo dự án thư viện F # đơn giản bao gồm tệp *.fs sử dụng <Link> (như trong câu trả lời của Tomas), sau đó chạy thử nghiệm đơn vị của bạn dựa vào DLL đã biên dịch.

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