Làm thế nào để bắt đầu TDD với Ruby on Rails? [đóng cửa]


167

Tôi quen thuộc với các khái niệm (đã tham gia các lớp kiểm tra ở trường đại học), nhưng tôi không chắc làm thế nào để thực sự sử dụng chúng vì tôi chưa bao giờ làm việc trong một dự án TDD "thực sự".

Tôi sắp bắt đầu phát triển một dự án bằng Ruby on Rails (rất có thể sử dụng 2.3). Ứng dụng này sẽ được sử dụng để quản lý dữ liệu, người dùng và một số tệp. Ban đầu nó sẽ không quá phức tạp nhưng có thể sẽ mở rộng rất nhiều trong 6 tháng tới vì vậy tôi cảm thấy đây là thời điểm thích hợp để tham gia nhiều hơn vào TDD.

Tôi đã có một ý tưởng cơ bản về cách thực hiện nó, nhưng tôi vẫn cần một số gợi ý và lời khuyên:

  • Tôi nên đọc bài viết nào về Ruby on Rails TDD 101?

  • Tôi cần kiểm tra cái gì?

  • Tôi nên sử dụng gem / plugin nào?

  • Tôi có nên sử dụng rspec ? Thứ gì khác?

  • Khi tôi đã có tất cả các lớp thử nghiệm, làm cách nào để triển khai chúng? (ví dụ: Tích hợp liên tục)

  • TDD thực sự tốn thời gian như thế nào?

  • Tôi có cần đọc một cuốn sách về điều này hay tôi có thể có được mọi thứ chỉ bằng cách chơi xung quanh nó và đọc các hướng dẫn trực tuyến? Nếu tôi cần đọc một cuốn sách, cuốn sách gì?


Tôi thích học với các ví dụ để ai đó có thể cho tôi biết tôi sẽ đi như thế nào và thực hiện phương pháp TDD để giải quyết vấn đề này:

Tôi có công ty. Tôi có Liên hệ. Một liên hệ có thể được liên kết với 1 công ty. Một công ty có thể có nhiều liên hệ. Tôi muốn tạo ra các cách để tạo liên hệ, công ty và liên kết liên lạc với các công ty.

Bạn không cần phải sử dụng ví dụ này trong câu trả lời của mình nhưng nó sẽ giúp :)

Câu trả lời:


202

Tôi nên đọc bài viết nào về Ruby on Rails TDD 101?

Tôi sẽ bắt đầu với một hướng dẫn để thử nghiệm các ứng dụng đường ray .

Ngoài ra Railscast có một số screencasts tuyệt vời về cách sử dụng các công cụ kiểm tra khác nhau.

Tôi cần kiểm tra cái gì?

Tôi sẽ bắt đầu với các mô hình, vì chúng rất dễ kiểm tra. Quy tắc đơn giản là bạn cần bao gồm mọi câu lệnh if trong bài kiểm tra của mình.

Bạn nên kiểm tra mục đích của phương thức (để đảm bảo nó hoạt động như mong đợi) cũng như tất cả các trường hợp cạnh.

Ngoài ra, hãy chắc chắn rằng bạn không kết thúc thử nghiệm.

Tôi nên sử dụng gem / plugin nào? Có nên sử dụng rspec? Thứ gì khác?

Khi bạn bắt đầu, chỉ cần sử dụng Test Unit. Bạn có thể sử dụng rspechoặc cucumbersau khi bạn làm quen với những điều cơ bản.

Autotestlà một công cụ tốt để có nếu bạn muốn được thử nghiệm thực sự. Nhưng đó là một "tốt đẹp có" không bắt buộc.

Khi tôi đã có tất cả các lớp thử nghiệm, làm cách nào để triển khai chúng?

Không chắc chắn về câu hỏi. Bạn thường không triển khai các bài kiểm tra. Khi bạn có tất cả các lớp kiểm tra, hãy gõ đơn giản 'kiểm tra cào' để chạy tất cả các bài kiểm tra của bạn.

TDD thực sự tốn thời gian như thế nào?

Nó tiết kiệm thời gian thực sự. Nếu bạn thích câu đố mê cung, bạn biết rằng hầu như luôn luôn dễ dàng hơn để giải quyết nó nếu bạn đi từ kết thúc đến bắt đầu. Tương tự với TDD. Nếu không có Test Driven, bạn luôn nghĩ rằng 'tôi nên làm gì tiếp theo'. Với Test Driven, bài kiểm tra sẽ cho bạn biết phải làm gì tiếp theo (nó sẽ bị hỏng nếu logic không có ở đó nên bạn chỉ cần sửa phần bị hỏng). Ngoài ra, bạn có ít lỗi hơn sẽ giúp bạn tiết kiệm rất nhiều thời gian trong thời gian dài.

Tôi có cần đọc một cuốn sách về điều này hay tôi có thể có được mọi thứ chỉ bằng cách chơi xung quanh nó và đọc các hướng dẫn trực tuyến? Nếu tôi cần đọc một cuốn sách, cuốn sách gì?

Bạn không cần một cuốn sách. Cách hiệu quả nhất để học bất cứ điều gì là: chỉ cần làm điều đó. Quay trở lại cuốn sách hoặc tài nguyên trực tuyến khi bạn gặp phải một câu hỏi hoặc vấn đề. Điều này cũng nhanh nhẹn.

Trong ví dụ của bạn, những điều cần kiểm tra là: Một liên hệ có thể được liên kết với 1 công ty, Một công ty có thể có nhiều liên hệ, tạo cách để tạo liên hệ và liên kết liên hệ với các công ty.

class CompanyTest <Test::Unit
    def test_relationship # test associations/relationships
        c = companies(:some_company)
        assert_equal [a list of contacts], c.contacts # make sure a company can have multiple contacts
    end
end

class ContactTest<Test::Unit
   def  test_relationships
        c = contact(:some_contact)
        assert_equal some_company, c.company # make sure the contact link to 1 company
   end

   def  test_create/add
        # test create contacts, here you need to make sure the contact is created correctly, and linked to company correctly
   end
end

3
Các liên kết đến bài viết bị hỏng, nhưng không tìm thấy nó ở đây: web.archive.org/web/20100325215651/http://bloritsch.d-haven.net/...
fivetwentysix




5

TDD là tất cả về bài kiểm tra viết đầu tiên. Điều này về cơ bản buộc bạn phải viết khách hàng của riêng bạn trước khi bạn viết mã ứng dụng của mình. Chu trình thường viết một bài kiểm tra cho một API không tồn tại, chạy thử nghiệm dự kiến ​​nó sẽ thất bại, hãy viết mã API của bạn, chạy lại bài kiểm tra của bạn và đảm bảo rằng nó vượt qua. Sau đó viết bài kiểm tra tiếp theo của bạn ... và cứ thế.

Bạn cũng có thể quan tâm đến hướng dẫn Rails này .



3

Tôi nên sử dụng gem / plugin nào?

Tôi đã luôn luôn được hưởng shoulda .

TDD thực sự tốn thời gian như thế nào?

Lý do tôi luôn thích phát triển TDD là vì nó tập trung vào cách tôi sẽ triển khai một đoạn mã cụ thể. Tôi có một cảm giác giai thoại rằng bất cứ khi nào tôi tuân thủ mạnh mẽ hơn các nguyên tắc TDD, tôi sẽ dành ít thời gian hơn để làm lại sau này. Lượng thời gian dành là tất cả trong việc bạn viết bài kiểm tra đơn vị tốt như thế nào. Nếu các bài kiểm tra đơn vị không nắm bắt được hành vi dự kiến, tất cả thời gian dành cho chúng sẽ bị lãng phí.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.