2012-11-30 10 views
7

Tôi có bộ MiniTest. Tôi đang sử dụng Minitest::Unit::TestCase cơ bản, không phải thông số kỹ thuật. Tôi có các phương thức setupteardown được xác định trong lớp con TestCase của tôi. Chúng hoạt động hoàn hảo khi tôi chạy một tệp thử nghiệm như vậy: ruby test/whatever_test.rb. Nhưng khi tôi chạy rake test, setupteardown không được gọi. Phần liên quan của Rakefile của tôi là:Minitest #setup và #teardown không được gọi khi chạy thử qua Rake

require 'rake/testtask' 

Rake::TestTask.new do |t| 
    t.test_files = FileList['test/*_test.rb'] 
    t.verbose = true 
end 

Tại sao không phải là setupteardown được chạy khi Rake::TestTask được sử dụng?

Tôi muốn dán mã trường hợp thử nghiệm vào đây, nhưng có rất nhiều trường hợp. Tôi chắc chắn sẽ dán vào một số tập hợp con của nó, nếu có một phần cụ thể bạn muốn xem.

Tôi đang chạy Tối thiểu 4.3.2 trên Ruby 1.9.3-p194.

+1

Bạn có thể đăng bài kiểm tra không hoạt động tối thiểu không? – tadman

Trả lời

14

Vấn đề là một trường hợp thử nghiệm khác đã ghi đè các phương pháp setupteardown. Tôi đã vô tình đưa ra hai trường hợp kiểm tra cùng một tên lớp, đó là lý do tại sao ghi đè xảy ra. Đương nhiên, lỗi này đã không xảy ra khi tôi chạy một trường hợp thử nghiệm duy nhất, điều này giải thích sự khác biệt về hành vi khi sử dụng Rake.

+0

Có vấn đề tương tự này trong Rails 5 System tests (sử dụng minitest). Phương pháp thiết lập cho một thử nghiệm hệ thống không được thực hiện khi chúng tôi chạy tất cả các kiểm tra hệ thống của chúng tôi, nhưng nó đã được thực hiện khi chúng tôi chỉ chạy tệp thử nghiệm hệ thống đó. Sửa lỗi của chúng tôi chỉ đơn giản là đổi tên tệp kiểm tra hệ thống thành tệp khác và sửa lỗi ghi đè đã xảy ra. Cảm ơn! – Neil

1

Trong trường hợp của tôi, tôi đã viết các bài kiểm tra cho giao tiếp socket và đã thêm phương thức trợ giúp có tên send. Vì MiniTest sử dụng send trong nội bộ để gọi các phương thức teardown, thay vào đó, hãy gọi số send của riêng tôi thay vì phương thức gửi đi.