paint-brush
Cách tiết kiệm thời gian bằng cách kiểm tra ứng dụng của bạntừ tác giả@aksenov
841 lượt đọc
841 lượt đọc

Cách tiết kiệm thời gian bằng cách kiểm tra ứng dụng của bạn

từ tác giả Viacheslav Aksenov7m2022/12/16
Read on Terminal Reader

dài quá đọc không nổi

Viacheslav Aksenov là nhà phát triển phụ trợ chuyên phát triển các hệ thống phụ trợ phức tạp trong Java và Kotlin. Trong bài viết này, bạn có thể tìm thấy các mẹo giúp bạn bắt đầu viết bài kiểm tra và cho bạn biết cách thực hiện. Có 4 lợi ích chính mà bạn nhận được khi bắt đầu viết thử nghiệm cho mã của mình: Chất lượng mã được cải thiện, phát triển nhanh hơn, gỡ lỗi dễ dàng hơn và tự tin hơn vào mã của bạn. Phát triển dựa trên thử nghiệm (TDD) là một phương pháp phát triển phần mềm trong đó các thử nghiệm được viết trước mã triển khai.
featured image - Cách tiết kiệm thời gian bằng cách kiểm tra ứng dụng của bạn
Viacheslav Aksenov HackerNoon profile picture

Xin chào! Tên tôi là Viacheslav Aksenov và tôi là nhà phát triển phụ trợ chuyên phát triển các hệ thống phụ trợ phức tạp bằng Java và Kotlin. Ngoài ra, tôi tự viết rất nhiều mã mà bạn có thể tìm thấy trên GitHub của tôi: https://github.com/v-aksenov


Nếu bạn không viết các bài kiểm tra cho mã của mình, thì tôi sẽ cho bạn biết lý do tại sao các bài kiểm tra đáng giá mỗi phút bạn đầu tư vào chúng. Trong bài viết này, bạn có thể tìm thấy các mẹo giúp bạn bắt đầu viết bài kiểm tra và tôi sẽ cho bạn biết cách thực hiện.

Tại sao kiểm tra viết là rất quan trọng

Có 4 lợi ích chính mà bạn nhận được khi bắt đầu viết bài kiểm tra cho mã của mình:


  1. Chất lượng mã được cải thiện: Bằng cách viết các bài kiểm tra, bạn có thể đảm bảo rằng mã của mình đang hoạt động chính xác và mọi thay đổi bạn thực hiện đều không phá vỡ chức năng hiện có. Điều này có thể giúp bạn bắt lỗi sớm và ngăn chúng trở thành vấn đề lớn về sau.


  2. Phát triển nhanh hơn: Các thử nghiệm tự động có thể được chạy nhanh chóng và nhất quán, điều này có thể giúp bạn tiết kiệm thời gian và công sức khi phát triển ứng dụng của mình. Điều này có thể đặc biệt hữu ích khi thực hiện các thay đổi đối với mã của bạn, vì bạn có thể nhanh chóng chạy thử nghiệm để đảm bảo rằng các thay đổi của bạn không gây ra bất kỳ lỗi mới nào.


  3. Gỡ lỗi dễ dàng hơn: Nếu bạn gặp sự cố với ứng dụng của mình, việc có một bộ kiểm tra có thể giúp xác định nguồn gốc của sự cố dễ dàng hơn. Bằng cách chạy thử nghiệm, bạn có thể nhanh chóng xác định phần nào trong mã của mình đang gây ra sự cố và tập trung nỗ lực vào việc khắc phục sự cố đó.


  4. Tăng sự tự tin: Các bài kiểm tra viết có thể mang lại cho bạn sự tự tin vào mã của mình và vào những thay đổi bạn thực hiện đối với mã đó. Điều này có thể đặc biệt hữu ích khi làm việc trên một ứng dụng lớn, phức tạp, nơi khó có thể biết chắc chắn rằng mã của bạn là chính xác.

Được rồi, tôi tin bạn, nhưng tôi phải bắt đầu như thế nào?

Có một số phương pháp hay nhất có thể được tuân theo khi thử nghiệm các ứng dụng web:


  • Viết bài kiểm tra tự động: Kiểm tra tự động là điều cần thiết để đảm bảo rằng ứng dụng của bạn hoạt động chính xác và mọi thay đổi bạn thực hiện không phá vỡ chức năng hiện có. Các bài kiểm tra tự động có thể được chạy nhanh chóng và nhất quán, khiến chúng trở thành một công cụ có giá trị để phát hiện lỗi và đảm bảo rằng ứng dụng của bạn có chất lượng cao.


  • Sử dụng phương pháp phát triển dựa trên thử nghiệm: Phát triển dựa trên thử nghiệm (TDD) là một phương pháp phát triển phần mềm trong đó các thử nghiệm được viết trước mã triển khai. Điều này giúp đảm bảo rằng mã được viết để đáp ứng các yêu cầu của các bài kiểm tra và các bài kiểm tra là toàn diện và hiệu quả.


  • Viết bài kiểm tra đơn vị: Kiểm tra đơn vị là các bài kiểm tra nhỏ, tập trung để kiểm tra các thành phần hoặc đơn vị riêng lẻ của ứng dụng của bạn một cách riêng biệt. Điều này giúp đảm bảo rằng mỗi thành phần đều hoạt động chính xác và giúp dễ dàng xác định nguồn gốc của bất kỳ sự cố nào có thể phát sinh.


  • Viết bài kiểm tra tích hợp: Bài kiểm tra tích hợp kiểm tra cách các thành phần khác nhau trong ứng dụng của bạn hoạt động cùng nhau. Điều này rất quan trọng vì nó giúp đảm bảo rằng ứng dụng của bạn hoạt động và các phần khác nhau trong mã của bạn tương thích với nhau.


  • Sử dụng khung mô phỏng: Có thể sử dụng khung mô phỏng để mô phỏng hành vi của các thành phần phụ thuộc bên ngoài, chẳng hạn như cơ sở dữ liệu hoặc dịch vụ web, trong các thử nghiệm của bạn. Điều này có thể hữu ích để thử nghiệm cách ứng dụng của bạn phản ứng với các kịch bản khác nhau mà không cần phải thực sự thiết lập các phụ thuộc.

Bạn đã nói TDD? Đó là gì?

Phát triển dựa trên thử nghiệm (TDD) là một phương pháp phát triển phần mềm trong đó các bài kiểm tra được viết cho một đoạn mã mới trước khi bản thân mã đó được viết. Các bài kiểm tra được sử dụng để xác định hành vi mong muốn của mã và sau đó mã được triển khai để vượt qua các bài kiểm tra.


Quy trình TDD thường tuân theo các bước sau:


  1. Viết bài kiểm tra cho một hành vi nhỏ, cụ thể của mã.

  2. Chạy thử nghiệm và xác minh rằng nó không thành công vì mã chưa được triển khai.

  3. Viết số lượng mã tối thiểu cần thiết để vượt qua bài kiểm tra.

  4. Chạy lại bài kiểm tra và xác minh rằng nó vượt qua.

  5. Tái cấu trúc mã để cải thiện thiết kế và cấu trúc của mã mà không thay đổi hành vi của mã.

  6. Lặp lại quy trình cho hành vi cụ thể, nhỏ tiếp theo của mã.


Mục tiêu của TDD là tạo ra mã được thiết kế tốt, được kiểm tra tốt, dễ bảo trì và mở rộng. Bằng cách viết kiểm tra trước khi viết mã, bạn có thể đảm bảo rằng mã đáp ứng các yêu cầu và hoạt động như mong đợi.


Điều này có thể giúp bạn phát hiện và sửa lỗi sớm trong quá trình phát triển, đồng thời cũng có thể giúp bạn thiết kế mã của mình theo cách mô-đun và có thể tái sử dụng nhiều hơn.


TDD thường được sử dụng kết hợp với các phương pháp phát triển phần mềm khác, chẳng hạn như phát triển nhanh hoặc lập trình cực đoan.

Làm cách nào để viết bài kiểm tra đơn vị?

Nó không phải là một câu hỏi rất khó khăn. Khi bạn nhận ra rằng bạn cần phải viết một bài kiểm tra đơn vị, nhưng không biết làm thế nào, bạn có thể làm theo các bước sau:


  1. Xác định đơn vị mã mà bạn muốn kiểm tra. Một bài kiểm tra đơn vị thường kiểm tra một đoạn mã nhỏ, cụ thể, chẳng hạn như một phương thức hoặc chức năng đơn lẻ.


  2. Viết một trường hợp thử nghiệm cho đơn vị mã. Trường hợp thử nghiệm là một tập hợp các hướng dẫn chỉ định cách mã sẽ hoạt động và kết quả mong đợi sẽ như thế nào.


  3. Thiết lập các điều kiện tiên quyết cần thiết cho thử nghiệm. Điều này có thể liên quan đến việc tạo đối tượng, thiết lập dữ liệu hoặc thực hiện các hành động khác cần thiết để thử nghiệm chạy chính xác.


  4. Gọi đơn vị mã mà bạn đang kiểm tra và nắm bắt kết quả.


  5. Sử dụng các xác nhận để xác minh rằng kết quả của mã phù hợp với kết quả mong đợi. Một xác nhận là một câu lệnh chỉ định một điều kiện phải đúng để kiểm tra vượt qua.


  6. Chạy thử nghiệm, và kiểm tra kết quả. Nếu kiểm tra vượt qua, thì mã đang hoạt động như mong đợi. Nếu thử nghiệm thất bại, thì có lỗi trong mã cần được sửa.


  7. Tái cấu trúc mã, nếu cần. Nếu thử nghiệm vượt qua, thì bạn có thể cải thiện thiết kế và cấu trúc của mã mà không thay đổi hành vi của mã.

Còn về các bài kiểm tra tích hợp thì sao?

Kiểm tra tích hợp trong Java là một loại kiểm tra xác minh sự tích hợp và giao tiếp giữa các thành phần hoặc mô-đun khác nhau của ứng dụng Java.


Ví dụ: nếu bạn có một ứng dụng Java bao gồm giao diện người dùng phía trước, máy chủ phía sau và cơ sở dữ liệu, thử nghiệm tích hợp sẽ xác minh rằng tất cả các thành phần này đang hoạt động chính xác cùng nhau và có thể trao đổi dữ liệu như mong đợi.


Để viết bài kiểm tra tích hợp trong Java, thông thường bạn sẽ tạo một lớp kiểm tra riêng và sử dụng các công cụ kiểm tra như JUnit, RestAssured hoặc MockMvc để viết và chạy bài kiểm tra của mình. Trong các lớp kiểm tra của bạn, bạn có thể xây dựng ngữ cảnh Spring cục bộ và thiết lập các sơ khai để kiểm tra bất kỳ phần nào trong ứng dụng của bạn.

Hôm nay tôi có thể sử dụng công cụ nào để viết bài kiểm tra cho các ứng dụng Java?

Trước tiên, bạn cần nhớ rằng để viết thử nghiệm trong thế giới Java, đối thủ lớn là Spring Framework. Nó đã có nhiều bộ khởi động mùa xuân để thử nghiệm. Nhưng nếu bạn muốn sử dụng bất kỳ giải pháp đơn giản nào, bạn có thể xem qua các thư viện rất phổ biến để thử nghiệm trong Java:


Mô phỏng:

Mockito là một khung mô phỏng phổ biến cho Java. Nó cho phép bạn tạo các đối tượng giả và thiết lập các phương thức sơ khai, sau đó có thể sử dụng các phương thức này trong các trường hợp thử nghiệm của bạn để bắt chước hành vi của các đối tượng thực và xác minh rằng mã của bạn đang hoạt động như mong đợi.


Với Mockito, bạn có thể viết các bài kiểm tra mạnh mẽ hơn và ít nhạy cảm hơn với các thay đổi trong cơ sở mã, vì các bài kiểm tra được tách biệt khỏi các đối tượng thực và các phần phụ thuộc của chúng.


Điều này giúp kiểm tra các đơn vị mã riêng lẻ dễ dàng hơn và có thể giúp bạn bắt lỗi cũng như xác định các vùng mã cần tinh chỉnh thêm.


Để sử dụng Mockito trong dự án Java của bạn, bạn cần đưa thư viện Mockito vào đường dẫn lớp của mình. Sau đó, bạn có thể sử dụng API Mockito để tạo các đối tượng giả và thiết lập các phương thức sơ khai, cũng như để xác minh rằng mã của bạn đang hoạt động như mong đợi.


Để biết thêm thông tin chi tiết về cách sử dụng Mockito, bạn có thể tham khảo tài liệu chính thức hoặc xem một số hướng dẫn trực tuyến.


JUnit:

JUnit là một khung kiểm tra đơn vị cho ngôn ngữ lập trình Java. Nó được sử dụng để viết và chạy các bài kiểm tra lặp lại cho mã Java của bạn. Với JUnit, bạn có thể kiểm tra các đơn vị mã riêng lẻ và đảm bảo rằng chúng hoạt động chính xác mà không cần phải kiểm tra toàn bộ ứng dụng.


JUnit cung cấp một tập hợp các chú thích và các phương thức xác nhận mà bạn có thể sử dụng để viết các trường hợp thử nghiệm của mình. Ví dụ: bạn có thể sử dụng chú thích @Test để đánh dấu một phương thức là phương thức kiểm tra và phương thức assertEquals để xác minh rằng kết quả dự kiến khớp với kết quả thực tế.


JUnit cũng hỗ trợ chạy thử nghiệm song song và tạo báo cáo thử nghiệm.


Sử dụng JUnit có thể giúp bạn phát hiện và sửa lỗi sớm trong mã của mình trong quá trình phát triển, điều này có thể giúp bạn tiết kiệm thời gian và công sức về lâu dài. Nó cũng có thể giúp bạn đảm bảo rằng mã của bạn đang hoạt động chính xác và đáp ứng các yêu cầu của dự án của bạn.


Để tìm hiểu thêm về JUnit và cách sử dụng nó trong dự án Java của bạn, bạn có thể tham khảo tài liệu chính thức hoặc xem một số hướng dẫn trực tuyến.


Ảnh của Agê Barros trên Bapt