2015-05-22 23 views
12

Tôi đang lên kế hoạch cho ứng dụng RESTful Zend Framework 2 có khả năng chạy nhanh. Đối với thử nghiệm đơn vị và có lẽ cũng để kiểm tra cơ sở dữ liệu PHPUnit sẽ được sử dụng. Bây giờ tôi sắp xác định chức năng tesgin cho ứng dụng.Làm thế nào để thiết kế thử nghiệm chức năng trong một ứng dụng ZF2 RESTful?

"Kiểm tra chức năng" có nghĩa là để tôi thử nghiệm chức năng thực. Nó cũng nhận được một khía cạnh thử nghiệm tích hợp, kể từ khi ứng dụng được kiểm tra sau đó "intermodularily", do đó, nó là một thử nghiệm trên các đơn vị/mô-đun. (Sự hiểu biết của tôi về thử nghiệm chức năng có chính xác không?)

Để yêu cầu thực sự thử nghiệm này sẽ được gửi và độ tương phản so với kỳ vọng. Với các yêu cầu bằng văn bản nó có thể phức tạp hơn một chút, nhưng để giữ nó đơn giản, hãy xem xét trường hợp GET chỉ trước tiên. (Phải không?)

Vì mục đích này bằng cách sử dụng thử nghiệm hành vi, có vẻ như tạo ra hàng rào. (Thực ra tôi không thấy bất kỳ phương pháp thích hợp nào khác.) (Phải không?)

Nếu một trong các bước hợp lý của tôi là sai, vui lòng sửa tôi.

Công cụ kiểm tra hành vi nào có thể được sử dụng trong ngữ cảnh của ứng dụng RESTful PHP (ZF2)? PHPUnit Story Extension? behat? phpspec? Các khung công tác khác? Hoặc có thể thử nghiệm trực tiếp trên PHPUnit (xác định một bộ kiểm thử riêng biệt và thực thi trong các bài kiểm tra hành vi của các lớp thử nghiệm của nó với các cuộc gọi API)?

Hoặc là tất cả điều này sai và kiểm tra chức năng cần một cách tiếp cận hoàn toàn khác nhau?

+2

tôi bỏ phiếu để đóng câu hỏi này như off-topic vì nó có vẻ phù hợp hơn tại http://programmers.stackexchange.com/ –

+0

Cảm ơn bạn đã bình luận của bạn. Tôi nghĩ, câu hỏi này thực sự có thể được đăng trên programmers.stackexchange.com, nhưng nơi này cũng đúng. Nhưng dù sao, ngay cả khi không, tôi sẽ không đóng, nhưng chỉ cần chuyển nó đến programmers.stackexchange.com. – automatix

+0

Nó phù hợp hơn ở các lập trình viên. Bởi vì ở giai đoạn này nó có nhiều khái niệm hơn là "Tôi có mã này, làm cách nào để sửa lỗi này". Cảm thấy tự do để c & p để programmers.SE và xóa một này ':)' –

Trả lời

3

Behat là công cụ hoàn toàn có thể chấp nhận được đối với các thử nghiệm hành vi đối với ứng dụng Đơn giản (hoặc bất kỳ ứng dụng nào).

Nếu bạn đang nói về API cụ thể (mà Apigility thường là), bạn cũng có thể xem Dredd from apiary.io. Đó là một công cụ tuyệt vời để thử nghiệm sau khi bạn ghi lại API của mình (nhiều lợi ích khác để thực hiện điều đó)

+0

Bạn có thể thêm một số ví dụ mã? – Wilt

3

Tất cả các ví dụ về công cụ của bạn (PHPUnit Story Extension, behat, phpspec) được liên kết với PHP ... Thực tế , bạn có thể mở rộng tìm kiếm của mình.

Điều tuyệt vời với thử nghiệm hộp đen của ứng dụng web là bạn không cần phải sử dụng khung làm việc gắn với ngôn ngữ bạn đã sử dụng "bên trong hộp".

Ví dụ: tôi sử dụng Capybara để kiểm tra các ứng dụng web của mình, trong khi không có ứng dụng nào trong số đó được thực hiện bằng Ruby. Chọn loại phù hợp nhất với phong cách thử nghiệm của bạn.

tôi đã chọn Capybara cho cách tiếp cận người dùng làm trung tâm và khả năng đọc của nó:

require 'spec_helper' 

feature 'Register' do 

    scenario 'as a new user' do 
    visit '/register.html' 
    fill_in 'Username', :with => a_string() 
    fill_in 'Password', :with => 'secret' 
    fill_in 'Confirm password', :with => 'secret' 
    click_on 'submit' 
    expect(page).to have_content "Your account has been created" 
    end 

    scenario 'not as an existing user' do 
    visit '/register.html' 
    fill_in 'Username', :with => 'hatter' 
    fill_in 'Password', :with => 'secret' 
    fill_in 'Confirm password', :with => 'secret' 
    click_on 'submit' 
    expect(page).to have_content 'username already exists' 
    end 

end 

Và nếu ứng dụng của bạn là giống như một API, bạn có thể tìm thấy các loại khác của ngôn ngữ mà là phù hợp hơn cho việc này (như Frisby.js):

test.create('Site cookie authentication') 
    .post('http://cassandre.local:1337/_session', {name:'alice', password:'whiterabbit'}) 
    .expectStatus(200) 
    .after(function(error, resource) { 
    test.create('HTTP cookie authentication use') 
     .get('http://cassandre.local:1337/text/Wonderland/') 
     .addHeader('Cookie', resource.headers['set-cookie']) 
     .expectStatus(200) 
     .toss(); 
    }) 
    .toss(); 
+0

Cảm ơn bạn đã đăng bài. Tôi không thể chấp nhận nó và/hoặc tặng thưởng tiền thưởng, vì tôi không tìm thấy câu trả lời cho câu hỏi của tôi (lý thuyết). Nhưng dù sao, nó cung cấp thông tin rất hữu ích tôi thực sự cần, cảm ơn vì điều này! +1 – automatix

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