Điểm:0

Chạy thử nghiệm cho một mô-đun mà không yêu cầu cài đặt toàn bộ trang web

lá cờ in

Tôi đang xây dựng mô-đun tùy chỉnh (để sử dụng cho nhiều dự án) với mã dựa trên nội dung từ lõi Drupal và mô-đun bên thứ ba (ví dụ: mở rộng lớp, triển khai giao diện, chú thích dưới dạng plugin, v.v.). Tôi muốn bắt đầu viết các bài kiểm tra cho chúng, với các bài kiểm tra đơn vị để bắt đầu.Nhưng cho đến nay, tất cả các tài nguyên đều hướng đến việc đưa mô-đun vào cài đặt Drupal và thử nghiệm trong thiết lập đó, như thể tôi đang chạy một trang web Drupal đầy đủ - ngay cả đối với thử nghiệm đơn vị.

Tôi đã tưởng tượng nhiều hơn rằng mô-đun của tôi sẽ có trình chạy, phần phụ thuộc và lõi Drupal là phần phụ thuộc (hoặc phần phụ thuộc của nhà phát triển) - giống như cách các bài kiểm tra JavaScript thường được viết, cho dù đó là bài kiểm tra đơn vị hay bài kiểm tra trình duyệt không đầu. Nghĩa là, kiểm tra JavaScript không yêu cầu bạn phải đưa mã của mình vào một số mã khác trước khi bạn có thể bắt đầu kiểm tra.

Điều này có thể đạt được không? Hay việc đưa mã mô-đun của tôi vào bản cài đặt Drupal thực sự là cách duy nhất để kiểm tra các mô-đun Drupal?

Jaypan avatar
lá cờ de
Các bài kiểm tra đơn vị không khởi động toàn bộ hệ thống và chạy rất nhanh.Kiểm tra hạt nhân, kiểm tra chức năng và kiểm tra JavaScript yêu cầu khởi động lại hệ thống và mất nhiều thời gian hơn.
lá cờ in
@Jaypan Yup, tôi biết các loại thử nghiệm và cách chúng chạy. Câu hỏi giống như "các mô-đun lõi và bên thứ ba của Drupal có thể là 'phần phụ thuộc của nhà phát triển' để tôi có thể đáp ứng các phần phụ thuộc của mô-đun trong quá trình thử nghiệm và chạy thử nghiệm đơn vị của mình mà không cần thiết lập Drupal theo kiểu trang web không?"
Jaypan avatar
lá cờ de
Không chính xác, vì khi đó bạn sẽ kiểm tra mã bên ngoài, thay vì đơn vị mã của riêng bạn. Trong trường hợp này, thay vào đó, bạn tạo mô hình/sơ khai mô phỏng dịch vụ mà bạn đang cố gọi: https://www.drupal.org/docs/automated-testing/phpunit-in-drupal/mocking-entities-and-services- with-phpunit-and-mocks
Jaypan avatar
lá cờ de
Tôi đặt hai nhận xét cuối cùng đó thành một câu trả lời toàn diện hơn cho câu hỏi ban đầu.
Điểm:2
lá cờ de

Các bài kiểm tra đơn vị không khởi động toàn bộ hệ thống và chạy rất nhanh. Kiểm tra hạt nhân, kiểm tra chức năng và kiểm tra JavaScript yêu cầu khởi động lại hệ thống và mất nhiều thời gian hơn.

Với thử nghiệm đơn vị, bạn không khai báo các phụ thuộc vào mã nước ngoài. Điều này là do đơn vị kiểm tra kiểm tra một đoạn mã, không phải mã nước ngoài. Nếu một lỗi được đưa vào mã nước ngoài và mã đang được kiểm tra phụ thuộc vào mã đó, thì các kiểm tra sẽ thất bại, mặc dù mã đang được kiểm tra vẫn đúng. Đây sẽ là một lỗi sai và một nhà phát triển có thể sẽ dành thời gian để cố gắng tìm ra lý do tại sao mã của họ bị lỗi, mặc dù nó không phải như vậy.

Giải pháp là sử dụng giả để khai thác dữ liệu. Mô hình giả là một dịch vụ giả mạo, được tạo trong quá trình thử nghiệm, mô phỏng dịch vụ phụ thuộc thực tế. Vì vậy, khi mã đang được kiểm tra thực hiện lệnh gọi đến mã nước ngoài, mô hình giả trả về một phản hồi (còn gọi là sơ khai) như thể mã nước ngoài đã phản hồi, loại bỏ mọi nguy cơ dương tính giả do lỗi mã nước ngoài, vì kiểm tra của bạn sẽ luôn phản hồi và sẽ luôn phản hồi chính xác như bạn đặt.

lá cờ in
Tôi hiểu rằng tôi có thể giả định các phần phụ thuộc (ví dụ: dịch vụ, đối số, v.v.).Tôi băn khoăn hơn về điều gì sẽ xảy ra với các lớp được khai báo trong `use` hoặc lớp tôi đang mở rộng hoặc giao diện tôi đang triển khai hoặc các đặc điểm tôi đang áp dụng. Ví dụ: tôi xây dựng plugin _extending_ core's `PluginBase`. Tôi có cần làm gì đặc biệt cho bài kiểm tra của mình liên quan đến `PluginBase` không? Bài kiểm tra có tìm kiếm `PluginBase` không? Tôi có cần `PluginBase` thật không? Hay tôi phải sử dụng `PluginBase` giả mạo? Tôi chỉ đang thử nghiệm một số logic cơ bản trong plugin đó, không phải toàn bộ cơ chế của plugin.
Jaypan avatar
lá cờ de
Tôi khuyên bạn nên xem xét một số ví dụ cốt lõi hoặc mở các vé mới cho câu hỏi của bạn, vì tôi cảm thấy câu hỏi ban đầu đã được trả lời, đó là bạn sử dụng mô hình giả để xử lý các phụ thuộc trong các bài kiểm tra đơn vị. Và vì các mô-đun cốt lõi đang làm điều này, vâng, khai báo `use` sẽ hoạt động tốt.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.