2016-03-11 18 views
6

Tôi đang viết một gói R, và tôi đang sử dụng testthat để kiểm tra đơn vị. Nhiều thử nghiệm đơn vị của tôi dành cho các chức năng thử nghiệm hoạt động trên một đối tượng nhất định cụ thể cho gói của tôi. Đối với những thử nghiệm này, tôi đã tạo ra một hàm trợ giúp để thiết lập một đối tượng giả. Tôi có một vài chức năng trợ giúp khác cũng như cắt giảm số lượng mã trong các bài kiểm tra đơn vị của tôi.R dữ liệu thử nghiệm đơn vị thử nghiệm và quy ước chức năng trợ giúp

Hiện tại, các hàm trợ giúp này nằm trong thư mục R/ của tôi, vì sau đó chúng có sẵn cho các tệp thử nghiệm đơn vị của tôi (có trong tests/testthat/). Tôi tìm thấy nó một chút lạ để đặt chức năng chỉ được sử dụng cho các bài kiểm tra đơn vị trong thư mục R/. Sẽ rất tuyệt nếu có thể đặt chúng ở đâu đó trong thư mục tests/. Nhưng có vẻ như làm như vậy làm cho họ không có sẵn trong các bài kiểm tra đơn vị. Lưu ý rằng các hàm trợ giúp này được sử dụng cho một số tệp thử nghiệm khác nhau, do đó, việc đặt các hàm trợ giúp ở đầu một tệp chứa các kiểm tra đơn vị không phải là một giải pháp.

Một câu hỏi liên quan khác là nơi đặt các tệp dữ liệu được sử dụng cho các bài kiểm tra đơn vị. Ví dụ một số chức năng của tôi hoạt động trên các đối tượng ExpressionSet từ gói limma (có sẵn trên Bioconductor), mà tôi nạp vào R trong khi thử nghiệm đơn vị với chức năng load(). Hiện tại tôi đặt chúng trong thư mục inst/extdata, bởi vì sau đó tôi có thể truy cập chúng với system.file() trong các bài kiểm tra đơn vị của tôi. Thư mục này cũng chứa các tệp dữ liệu khác dành cho người dùng gói. Tôi thấy hơi lạ khi đặt dữ liệu thử nghiệm của mình, điều này không dành cho người dùng cuối, ở cùng một nơi với dữ liệu gói, có nghĩa là cho người dùng cuối.

Vì vậy, câu hỏi của tôi là, có thể đặt các hàm trợ giúp kiểm tra đơn vị và dữ liệu kiểm tra tất cả trong thư mục tests/. Và nếu vậy, làm thế nào để tôi acces các tập tin từ bên trong các bài kiểm tra đơn vị? Các thực tiễn/quy ước tốt nhất cho người trợ giúp kiểm tra đơn vị và dữ liệu thử nghiệm đơn vị là gì?

Trả lời

8

Tôi hiểu rằng các tệp trong tests/testthat/ bắt đầu bằng helper được cung cấp trước khi chạy bất kỳ thử nghiệm nào bằng testthat. Vì vậy, bạn có thể đặt các hàm trợ giúp cho các thử nghiệm bên trong tên phù hợp có tên helper-*.R trong phạm vi tests/testthat/.

Từ sự giúp đỡ R cho source_file từ testthat (?testthat::source_file)

The expectation is that the files can be sourced in alphabetical 
order. Helper scripts are R scripts accompanying test scripts but 
prefixed by ‘helper’. These scripts are once before the tests are 
run. 

Một ví dụ có thể được nhìn thấy trong source code for dplyr trên github.

Đối với thử nghiệm. Tôi làm theo lời khuyên từ một nhận xét từ câu hỏi này: Where to put data for automated tests with testthat? và sử dụng inst/testdata, sau đó truy cập các tệp với system.file("testdata",...,package="my_package")

1

Có lẽ nó sẽ giúp bạn: https://github.com/gmum/gmum.r/tree/master/tests/testthat

Có chức năng helper gọi kết hợp trong file combinations.R Sau đó, nó được bao gồm trong test_cec_centroid_assignment.R sử dụng source('combinations.R') Tôi không chắc chắn nó là một công ước tốt nhưng nó hoạt động.

+0

Điều này dường như hoạt động nhưng các chức năng vẫn còn nán lại trong không gian làm việc sau khi kiểm tra đơn vị. Đối với một số lý do xóa chúng theo cách thủ công ở phần cuối của tệp thử nghiệm không hoạt động. Nó giống như ma thuật, tôi có thể gọi hàm nhưng sử dụng 'rm (" ")' cho 'đối tượng '' không tìm thấy'. Vì vậy, mặc dù nó hoạt động nó có lẽ không phải là thực hành tốt nhất. –

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